我是节点和表达新手.我已经看到了使用"res.send"和"return res.send"的app.get和app.post示例.这些都一样吗?
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.type('text/plain');
res.send('i am a beautiful butterfly');
});
Run Code Online (Sandbox Code Playgroud)
要么
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.type('text/plain');
return res.send('i am a beautiful butterfly');
});
Run Code Online (Sandbox Code Playgroud)
AJ *_*unk 26
该return关键字从函数返回,从而结束其执行.这意味着它之后的任何代码行都不会被执行.
在某些情况下,您可能想要使用res.send然后再做其他事情.
app.get('/', function(req, res) {
res.send('i am a beautiful butterfly');
console.log("this gets executed");
});
app.get('/', function(req, res) {
return res.send('i am a beautiful butterfly');
console.log("this does NOT get executed");
});
Run Code Online (Sandbox Code Playgroud)
ptm*_*der 11
我想指出它在我的代码中究竟在哪里产生了影响。
我有一个验证令牌的中间件。代码如下:
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1] || null;
if(token === null) return res.sendStatus(401); // MARKED 1
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if(err) return res.sendStatus(403); // MARKED 2
req.user = user;
next();
});
}
Run Code Online (Sandbox Code Playgroud)
在// MARKED 1行,如果我不写回,中间件将继续和呼叫next()和发送与状态的响应200,而不是它是不是预期的行为。
同样的道理 // MARKED 2
如果您不在return这些if块内使用,请确保您使用的else是next()被调用的块。
希望这有助于从一开始就理解概念并避免错误。
| 归档时间: |
|
| 查看次数: |
9371 次 |
| 最近记录: |