node学习(2)-路由读取图片
通常我们开发项目的时候都要用到图片,那么nodejs是如何读取图片的呢?
我们来看一下,因为一个网页中图片的数量是不确定的,而我们不能每一张图片都去写它的src路径,这时候最好的方法就是写一个专门读取图片的路由,通过路由加载图片,这样既快捷又方便我们的理解。
文件目录:

我要加载的图片在index页面

注:问号?前面部分表示路由,问号后面才是图片的路径(相对于服务器文件),我的是first_server.js文件
1、在自己定义的目录下新建服务器文件
我的是:
first_server.js
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]必须是在路由模块里面定义过的才行,不然会出现找不到报错

2、编写路由模块(router.js)
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);
}
}
3、编写操作文件(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一下:

运行结果:

node学习(2)-路由读取图片的更多相关文章
- 【学习笔记】tensorflow图片读取
目录 图像基本概念 图像基本操作 图像基本操作API 图像读取API 狗图片读取 CIFAR-10二进制数据读取 TFRecords TFRecords存储 TFRecords读取方法 图像基本概念 ...
- opencv学习之路(3)、批量读取图片、视频分解、视频合成
一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...
- Node学习(二) --使用http和fs模块实现一个简单的服务器
1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- nodeJS基础08:读取图片
1.读取图片 //server.js var http = require("http"); var readImage = require("./readImage&q ...
- C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体
//浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...
- [python3.6+opencv] 01 完成读取图片操作
学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...
- Node学习HTTP模块(HTTP 服务器与客户端)
Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...
- opencv图像处理时使用stringstream批量读取图片,处理后并保存
简介: 同文件输入输出流一样,使用stringstream可以批量读取图片,处理后并进行保存.因为C++中头文件 stringstream既可以从string读数据也可向string写数据,利于其这个 ...
随机推荐
- 7-6 公路村村通(30 分) 【prime】
7-6 公路村村通(30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤10 ...
- Java性能分析方法
Java调优经验 http://www.rowkey.me/blog/2016/11/02/java-profile/
- Machine Learning No.3: Logistic Regression
1. Decision boundary when hθ(x) > 0, g(z) = 1; when hθ(x) < 0, g(z) = 0. so the hyppthesis is: ...
- java多线程系列 JUC锁01 框架
转载 http://www.cnblogs.com/skywang12345/p/3496098.html 参考 https://www.cnblogs.com/leesf456/p/5453091. ...
- HTML5实现中国象棋游戏
在线演示 本地下载
- 分享知识-快乐自己:oracle12c创建用户提示ORA-65096:公用用户名或角色无效
今天在oracle12c上创建用户,报错了.如下图: 我很郁闷, 就打开了oracle官方网站找了下, 发现创建用户是有限制的. 2.解决方案 创建用户的时候用户名以c##或者C##开头即可. 错误写 ...
- ZOJ 1141 Closest Common Ancestors(LCA)
注意:poj上的数据与zoj不同,第二处输入没有逗号 ' , ' 题意:输出测试用例中是最近公共祖先的节点,以及这个节点作为最近公共祖先的次数. 思路:直接求,两个节点一直往上爬,知道爬到同一个节点, ...
- jvm file.encoding 属性引起的storm/hbase乱码
1. 问题 今天为storm程序添加了一个计算bolt,上线后正常,结果发现之前的另一个bolt在将中文插入到hbase中后查询出来乱码.其中字符串是以UTF-8编码的url加密串,然后我使用的URL ...
- VC6.0实用小技巧
VC6.0的若干实用小技巧 .检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键 “Ctrl+]”.如果括号匹配正确, ...
- JQuery添加删除标签
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <script src= ...