停止/退出node.js路由的正确方法是什么?

时间:2019-02-20 19:04:34

标签: javascript node.js express

我有一个node.js / express路由,该路由首先检查是否设置了cookie。

这很好用,如果没有设置cookie,我现在想退出路线。

我的路线看起来像这样

app.post('/VerEmpresas', function(req, res) {


  if(req.cookies.cookieName1) {
    var cookie = JSON.parse(req.cookies.cookieName1);

    if (!cookie || cookie.codigo != 0) {
      console.log('error' + cookie.codigo);
    } 

    if (cookie && cookie.codigo == 0) {
      console.log('ok' + cookie.codigo);
    } 
  } else {

    console.log('no cookie');
  }


});

我假设我可以用我的日常任务(例如knex()数据库调用)替换console.log('ok'),然后在其中解析res.send。

如果没有cookie,是否有一种适当的方法来排除路由,从而不会执行之后的代码?

2 个答案:

答案 0 :(得分:0)

在else部分中,您只发送错误响应。或return

if (req.cookies.cookieName1) {
  var cookie = JSON.parse(req.cookies.cookieName1);
  if (!cookie || cookie.codigo != 0) {
    console.log('error' + cookie.codigo);
  }
  if (cookie && cookie.codigo == 0) {
    console.log('ok' + cookie.codigo);
  }
} else {
  res.status(401).send('error, no cookie'); // or return
  console.log('no cookie');
}

答案 1 :(得分:0)

当您尝试进行会话检查或类似的工作时,您可能需要考虑利用express的中间件。因为您可能希望在需要会话的地方也添加相同的检查其他路由。

对于上面的代码,您可以尝试执行以下操作:

function checkCookie (req, res, next) {
  if(req.cookies.cookieName1) {
    var cookie = JSON.parse(req.cookies.cookieName1);
    if (cookie && cookie.codigo == 0) {
      next();
    } else {
      return res.status(401).send('error' + cookie.codigo);
    }
  } else {
    return res.status(401).send('no cookie');
  }

})


app.post('/VerEmpresas', checkCookie, function(req, res) {
   // Implement your business logic here in place of console.log('ok');
});

//If you want this middleware for all the routes
//You can use the function like this app.use(checkCookie);

在上面的代码中,您可以看到,如果找到cookie并有效,我们将调用next而不是发送响应,这意味着它将进入路由管道中的下一个任务。