一般咱們開發項目的時候都要用到圖片,那麼nodejs是如何讀取圖片的呢? 咱們來看一下,由於一個網頁中圖片的數量是不肯定的,而咱們不能每一張圖片都去寫它的src路徑,這時候最好的方法就是寫一個專門讀取圖片的路由,經過路由加載圖片,這樣既快捷又方便咱們的理解。 文件目錄: 我要加載的圖片在index頁面 注:問號?前面部分表示路由,問號後面纔是圖片的路徑(相對於服務器文件),個人是first_server.js文件 一、在本身定義的目錄下新建服務器文件 個人是: first_server.jshtml
var http=require('http'); var url=require('url'); var router=require('./module/router'); http.createServer(function (request,response) { response.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'}); if (request.url!=='/favicon.ico'){//清除二次訪問 var path=url.parse(request.url).pathname;//獲取當前路徑 if(path==='/')path='/index'; path=path.substr(1);//獲取去掉根符號‘/’的當前路徑 router[path](request,response);//路由,path是一個變量,如login、register、index } }).listen(5200);//端口號爲5200
解釋:兩次path的值不同, if(path==='/')path='/index'的做用是若是訪問的時候沒有輸入路徑,則默認進入index頁面 注: router[path]必須是在路由模塊裏面定義過的才行,否則會出現找不到報錯 二、編寫路由模塊(router.js)node
var url = require('url'); var optfile=require('./optfile');//導入自定義模塊要加路徑'./' module.exports={ readImg:function(req,res){ optfile.readImg(req,res); }, index:function(req,res){ optfile.index('./file/index.html',res); } }
三、編寫操做文件(optfile.js)數組
var fs = require('fs'); function recall(res,data,ext){ if (!ext)ext='html';//默認輸出格式爲HTML res.writeHead(200, {'Content-Type': 'text/'+ext+';charset=utf-8'}); res.end(data);//向瀏覽器輸出取得的數據 } module.exports={ readImg:function (req,res) { var path=req.url.split('?')[1]; var data = fs.readFile(path,'binary',function (err,data) { if (!err){ res.writeHead(200, {'Content-Type': 'image/jpeg'});//輸出類型 res.write(data,'binary');//二進制方式 }else { res.end('err'); } }) }, index:function (path,res) { var data = fs.readFile(path,function (err,data) { if (!err){ data=data.toString(); recall(res,data); }else { res.end('err'); } }) } };
由於圖片在nodejs中是以二進制的形式傳輸的,因此文件輸出要加‘binnary’表示二進制輸出. req.url至關於request.url表示取得當前請求的路徑,這裏表示圖片的所有路徑, req.url.split('?')表示將取得的路徑字符串用?拆分紅數組, req.url.split('?')[1]表示取字符串的?號後面部分,即圖片的相對路徑 不明白的能夠看下面,我console一下: 運行結果: 瀏覽器
原文出處:https://www.cnblogs.com/xyyl/p/10981656.html服務器