一般咱们开发项目的时候都要用到图片,那么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一下:
运行结果:
浏览器