middleware中间件的概念

简要来说express就是一个由路由和中间件构成的 web 开发框架。

当express服务收到客户端的请求时,会通过一组函数来处理请求。

这些函数用于解析请求体数据,处理错误,或者负责返回各种情况对应的消息,这种函数就叫中间件。

express中的中间件函数形如:

app.use(function middleware1(req, res, next){
// logic
});

req是请求体,附带着各种请求信息的属性,res附带返回信息的一些方法。

每个中间件应该只处理一种情况,并且,这些函数参数中的req是同一个对象。

因此,前面的中间件如果修改了req,后面的会得到修改后的对象。

当中间件接收到的req已经处理完了,或是没有达到处理条件,就调用next方法跳到下一个中间件处理。

如果既没调用res返回信息,也没调用next跳过,服务就会处于挂起状态。

默认的,如果一个请求跳过了所有中间件也没有得到返回,express会返回500返回码。


一个完整的事例

var express = require('express');
var app = express(); app.use(function(req,res,next){
// 这里可以访问req.body 来查看请求的参数
// 通过调用res.send() 来发送信息 // 没有该中间件要处理的情况 调用next跳到下一个中间件
});

当然,express在这基础上做了一些封装,减少了代码量。

例如要限定中间件所处理的uri,可以这么写

app.use('/requestURI', function(req,res,next){
// 这里当请求的uri跟指定uri不符,自动跳过该中间件
});

除了uri外,还可以根据请求方法来限制

app.use('/requestURI', function(req, res, next){
if('get' !== req.method.toLowercase()) next(); // your logic
});

相当于

app.get('/requestURI', function(req, res, next){
// your logic
});

组合起来

app.get('/requestURI', function(req, res, next){
// your logic
});

express支持get, post, put, delete等动词方法。


中间件对参数的支持。

当我们需要在uri中加入查询参数时,可以这么写

app.use('/requireURI/:qurey', functinor(req, res, next){
console.log(req.params.qures);
});

通过express我们可以快速开发一个web应用。

上一篇:Linux下ln链接命令详解


下一篇:使用TTS实现Oracle跨版本迁移