“ 把时间留给自己”
感觉好久不见了,各位宝宝们,你们那里的春天来了吗?昨天北京下雨了,经过一场春雨感觉树叶一下就长大了,好像夏天一样了,还没出去撒欢的宝宝们赶紧抓住春天的尾巴去撒欢啊!
Connect
—
connect是一个基于HTTP服务器的工具集,它提供了一种新的组织代码的方式与请求、响应对象进行交互,成为中间件。
what?中间件?
让我们来一起来写一个中间件,若如果请求超过阈值就打印出’too long‘
/*
- 请求时间中间件
- 选项 :
'time'('Number'):超时阈值(默认100)
@param {Object} options
@api public
*/
module.exports = function(opts){
var time = opts.time || 100;
return function(req,res,next){
var timer =setTimeout(function(){
console.log(
'\033[90m%s %s\033[39 \033[91m is 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();
}
}
根据中间件的用途,我们来写两个请求:
// sample.js
/*
创建一个connect应用,创建两条路由:
第一条很快返回,另一条1秒后返回
*/
var connect = require('connect'), time = require('./request-time');
/* 创建服务 */
var server = connect.createServer();
// 记录请求情况
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);
在终端执行:node sample.js
在浏览器请求:http://localhost:3000/a 结果如图:
在浏览器请求:http://localhost:3000/b 结果如图:
终端打印结果:
其实connect还有一些非常常用的内置中间件,明天我们一起看看吧,今天又晚了 ,所以睡了哦!晚安了,宝宝们。
ps:以后我的代码都将上传的gitlab上,有兴趣的宝宝可以问我要github账号哦!
愿我们有能力不向生活缴械投降---Lin