我有一个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,是否有一种适当的方法来排除路由,从而不会执行之后的代码?
答案 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而不是发送响应,这意味着它将进入路由管道中的下一个任务。