nodejs中间件Connect(1)
2014-10-23 16:11
337 查看
1.实现简单网站服务
首先请参考我的另一篇文章《一个用nodejs写的简单http服务器》,然后我们现在用一个在nodejs中使用频繁的中间件。首先我们使用这个中间件实现相同的功能。首先需要修改下JSON配置文件,如下:{
"name":"file-explorer"
,"version":"0.0.1"
,"description":"A command-file file explorer"
,"dependencies":{
"connect":"1.8.7"
}
} 然后运行npm install,就加载了connect中间件。
然后是server代码,具体如下:
var connect = require('connect');
var server = connect.createServer();
server.use(connect.static(__dirname + '/website'));
server.listen(3000);
将index文件和4张图片资源放到server.js所在目录的/wetsite目录下,输入网址: 127.0.0.1:3000,就OK了,代码减少了很多,可见中间件帮助我们实现了那些常用的功能,包括url=='/',not found的情况等等。
2.实现一个记录响应延时的功能
在工程目录中新建一个文件叫做request-time.js,内容如下:module.exports = function (opts){
var time = opts.time || 100;
return function(req,res,next){
var timer = setTimeout(function(){
console.log(
'\033[90m%s\033[39m\033[91mis taking too long!\033[39m'
,req.method
,req.url
);
},time);
var end = res.end;
res.end = function(chunk,encoding){
res.end = end;
res.end(chunk,encoding);
clearTimeout(timer);
};
next();
};
};
导出一个函数,这个函数可以设置一个响应时间的阈值,如果响应时间超过这个阈值,则打印日志,(timer的回调函数实现)。否则就要在响应结束,也就是res.end调
用的时候清除imer定时器。这里是将res.end保存在var end中,然后设置res.end为一个自定义的函数,该函数,设置回默认的end函数,然后先调用默认的end,然后清楚
timer定时器。这个清除定时器的工作其实只要调用end都会执行,只是如果在定时器时间到之前清除,就不会打印日志而已。
导出的这个函数,返回一个函数,这个函数是一个标准的中间件函数的格式,req,是请求数据,res,是response,返回数据,next,是用来调用下一个中间件的。所有的中间件形成一个类似链表的玩意,然后顺次查询,我的理解大概是这样的,虽然效率不是很高,但是简单易行。
然后在server.js中调用该中间件,如下:
var connect = require('connect');
var time = require('./request-time');
var server = connect.createServer();
//server.use(connect.static(__dirname + '/website'));
server.use(connect.logger('dev'));
server.use(time({time:500}));
server.use(function(req,res,next){
if('/a' == req.url){
res.writeHead(200);
res.end('Fast!');
}
else{
next();
}
});
server.use(function(req,res,next){
if('/b'==req.url){
setTimeout(function(){
res.writeHead(200);
res.end("Slow!");
},1000);
}
else{
next();
}
});
server.listen(3000);
user 就是用来添加中间件的,也就是添加一个具有固定参数格式的函数。然后输入网址进行测试:
输入http://127.0.0.1:3000/b,和http://127.0.0.1:3000/a,服务器终端输出如下:
有红色字体的部分是超时回调函数打印的,绿色的部分是server.use(connect.logger('dev'));的作用。
参考书目:《了不起的NodeJS》
相关文章推荐
- Nodejs中间件Connect
- nodejs connect 中间件
- NodeJS学习笔记之Connect中间件模块(一)
- Nodejs基础中间件Connect
- 大熊君大话NodeJS之------Connect中间件模块(第一季)
- NodeJS学习笔记之Connect中间件模块(二)
- 大熊君大话NodeJS之 ------ Connect中间件第二季(源码分析)
- NodeJS学习笔记之Connect中间件应用实例
- Nodejs基础中间件Connect
- Nodejs-connect 中间件
- 大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- [转]Nodejs基础中间件Connect
- [转]Nodejs基础中间件Connect
- NodeJS Connect 简单路由中间件
- Nodejs基础中间件Connect
- Nodejs基础中间件Connect
- NodeJS学习笔记之Connect中间件应用实例