- Connect是一个框架,它使用被称为中间件的模块化组件,在Connect中,中间件组件是一个函数,它拦截HTTP服务器提供的请求和响应对象,执行
逻辑,或者结束响应,或者把它传递给下一个中间件组件。Connect用分派器把中间件“连
接”在一起。
工作机制:在Connect中,中间件组件是一个JavaScript函数,按惯例会接受三个参数:一个请求对象,
一个响应对象,还有一个通常命名为 next 的参数,它是一个回调函数,表明这个组件已经完成
了它的工作,可以执行下一个中间件组件了。当一个组件不调用 next() 时,命令链中的后续中间件都不会被调用一个简单的connect
var connect = require('connect');
function logger(req, res, next) {
console.log('Hi');
next();
}
function hello(req, res, ) {
res,setHeader('Content-type', 'text/plain');
res.end('hello world');
}
connect()
.use(logger)
.use(hello)
.listen(3000)
hello 的参数中没有 next 回调,因为这个组件结束了HTTP响应,
从不需要把控制权交回给分派器
上面的链式调用也可以写成:
var app = connect();
app.use(logger);
app.use(hello);
app.listen(3000);
- 挂载中间件和服务器: Connect中有一个挂载的概念,可以给中间件或整个程序
定义一个路径前缀。使用挂载,你可以像在根层次下那样编写中间件(/ 根 req.url ),并且不修
改代码就可以把它用在任一路径前缀上。
connect()
.use(logger)
.use('/admin', restrict)
.use('/admin', admin)
.use(hello)
.listen(3000)
- 路由中间件组件: 路由会把请求URL映射到实现业务逻辑的
函数上。
- 错误处理中间件: 错误处理中间件函数必须接受四个参数: err 、 req 、 res 和 next ,
而常规的中间件只有三个参数: req 、 res 和 next 。
function errorHandler(err, req, res, next) {
console.error(err.stack);
res.setHeader('Content-Type', 'application/json');
if(err.notFound){
...
} else {
res.statusCode = 500;
res.end('error:Internal Server Error');
}
}