Fra*_*ard 3 javascript node.js express
我想知道如果我在expressjs中写这个会发生什么(我们假设app是一个expressjs应用程序).
app.get.use('/here' , function(req, res) {
// EXECUTE SET OF ACTION NUMBER 1
});
app.get.use('/here' , function(req, res) {
// EXECUTE SET OF ACTION NUMBER 2
})
Run Code Online (Sandbox Code Playgroud)
我们两次写相同的路线,但行动不同.第二个声明会超载第一个吗?
这取决于回调函数中发生的事情.考虑三个不同的例子:
一个)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
res.json(true);
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
b)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
C)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
next();
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
在(a)案例中,工作流程是自上而下的.第一个路由处理程序启动,console.logs"1!" 并回应true.由于已发送完整响应,因此永远不会到达以下路由处理程序.
在(b)的情况下,执行在第一个路由处理程序停止.它既不响应也不允许执行更进一步.如果你curl这个应用程序,你最终会有请求超时,虽然你会看到"1!" 在控制台上.
最后,在(c)的情况下,您可以看到next函数调用.这使得Express继续执行并转到下一个路由处理程序(如果有的话).由于还有另一个路由处理程序,它会被执行,所以你最终得到"1!" 和"2!" 打印在控制台上,以及正确发送的响应.
这里有几点:
next如果你期望另一个路由处理程序在当前路由器之后运行,则总是调用,当你编写中间件或者像你的情况一样,你可能要添加到另一个应用程序的"类似中间件"应用程序时,这一点尤其重要,| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |