Node.js express服务器的设计哲学

模型介绍

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

要点

[sc name="quote-black" ]在函数接力过程中,req,res是不会被重置的。这也给第三方插件的开发提供了广阔的空间。[/sc]

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

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(),于是我们自己写的函数就运行了。

给TA充电
共{{data.count}}人
人已充电
编程

C#的delegate和event关键字

2021-12-16 12:08:40

编程

prototype vs __proto__

2021-12-16 12:21:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索