未在 Sequelize catch 处理程序中执行的表达式响应
Express response not executing in Sequelize catch handler
我正在使用护照和OAuth对我网站上的用户进行身份验证。我已经制作了中间件来检查用户是否使用 OAuth 登录以及他们是否在允许的用户列表中。中间件工作,如果用户未获得授权,则阻止用户访问使用它的数据路由。问题是,在无法在列表中找到用户后,永远不会在 Sequelize catch
处理程序中调用响应,因此如果响应失败并且仅显示没有数据的页面,则永远不会重定向它们。
这是我的中间件。我知道正在达到catch
,因为我可以看到控制台.log,但res.status('401').redirect(
/admin/login );
永远不会发生。让我知道代码的其他部分是否有有用的内容。提前感谢您的所有帮助!
'use strict';
const clc = require(`cli-color`);
const models = require('../models');
const User = models.User;
function isLoggedIn(req, res, next) {
console.log(clc.red.bgBlue(` ::: `), req.user);
res.header('Access-Control-Allow-Credentials', true);
models.sql.sync()
.then(() => {
User.findOne({
where: {
email: req.user.unique_name
}
});
})
.then((user) => {
if (req.isAuthenticated() && user !== null && user.email === req.user.unique_name) { // if user is authenticated in the session and the user email matches the user found in the db, carry on
return next();
} else {
// if they aren't send not authorized
res.status('401').redirect(`/admin/login`);
}
})
.catch((err) => {
console.log(clc.red.bgWhite(`ERR :::: )`), err);
res.status(`401`).redirect(`/admin/login`);
});
}
module.exports = isLoggedIn;
根据文档,正确的语法是:
res.redirect(401, 'http://example.com');
另请参阅:将快递.js 4 的 res.status(401( 链接到重定向
相关文章:
- 是否存在将String转换为可执行的c++表达式的方法
- 为什么这个正则表达式需要这么长时间才能执行
- 突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
- 如何将变量表达式转换为可执行代码(而不是替换值)
- JavaScript:返回表达式后的语句将被执行
- 正则表达式回调函数只执行一次
- 如何在执行之前使 JavaScript 中的内联表达式等待
- 在视图模板中执行角度表达式会降低角度应用的性能
- 有没有办法生成一个可以通过 if 直接执行的条件表达式
- Chrome 在执行正则表达式匹配时崩溃
- 如何在 Javascript 中执行此正则表达式
- 是否可以传递立即调用的函数表达式的执行上下文
- 在 IE 上,表达式执行两次
- 我该如何在JavaScript数组中执行正则表达式查找uof值
- jQuery:如果内容与正则表达式模式匹配,则执行此功能
- Angular.js+PHP:如果在ngSanitized html模板内,则不执行Angular表达式
- 如果执行异步操作,将产生表达式块
- 未在 Sequelize catch 处理程序中执行的表达式响应
- 为什么Node在脚本中执行与repl不同的正则表达式匹配?
- JavaScript匿名函数立即调用/执行(表达式与声明)