node學習(2)-路由讀取圖片

一般咱們開發項目的時候都要用到圖片,那麼nodejs是如何讀取圖片的呢?
咱們來看一下,由於一個網頁中圖片的數量是不肯定的,而咱們不能每一張圖片都去寫它的src路徑,這時候最好的方法就是寫一個專門讀取圖片的路由,經過路由加載圖片,這樣既快捷又方便咱們的理解。
文件目錄:
image.png
我要加載的圖片在index頁面
image.png
注:問號?前面部分表示路由,問號後面纔是圖片的路徑(相對於服務器文件),個人是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的值不同,
image.png
if(path==='/')path='/index'的做用是若是訪問的時候沒有輸入路徑,則默認進入index頁面
image.png
: router[path]必須是在路由模塊裏面定義過的才行,否則會出現找不到報錯
image.png
二、編寫路由模塊(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一下:
在這裏插入圖片描述
在這裏插入圖片描述
運行結果:
image.png瀏覽器

相關文章
相關標籤/搜索