(本文未经许可禁止转载)

           

模型介绍

express模块使用下面的方式通信:

app.get('/',(req,res,next)=>{
    // Handle req and res
    next(); // or res.end();
})

它主要是用一种“回调函数接力”的形式处理客户请求。

这些回调函数被称为“中间件(middleware)”

比如:

app.get('/*',(req,res,next)=>{
    console.log(req.path);
    next(); // or res.end();
})

app.get('/hi',(req,res,next)=>{
    res.send("Hello world!");
})

这时当你访问/hi/*先被匹配,/hi将被先输出在控制台中

紧接着由于next()被调用,/hi被匹配,于是客户的浏览器中会出现Hello world

要点

在函数接力过程中,req,res是不会被重置的。这也给第三方插件的开发提供了广阔的空间。

比如当我们收到post请求时,我们通常不想自己把body的字符串转换成js object,因为通信协议首先有很多,还在随时代进步更新。自己写的话会增加维护成本。这时我们就可以用body-parser提供的回调函数帮我们处理reqbody部分。

let bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }));

app.post('/hi',(req,res,next)=>{
    res.send(JSON.stringify(req.body));
})

上面的代码首先在接收到用户的请求时body-parser函数会先处理req,并把结果挂在req.body上,不难猜到在body-parser的实现中最后一行调用了next(),于是我们自己写的函数就运行了。

       

(本文未经许可禁止转载)

   

发表评论