app.get - res.send vs return res.send之间有什么区别

Bar*_*SIH 25 node.js express

我是节点和表达新手.我已经看到了使用"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块内使用,请确保您使用的elsenext()被调用的块。

希望这有助于从一开始就理解概念并避免错误。