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浏览器

相关文章
相关标签/搜索