node.js - NodeJS重定向到带有NodeError的有效路由抛出错误:无效状态代码
问题描述
我的节点应用程序需要设置一个特定的session
令牌/字段来执行设置。
这种方法和其他authentication
类型方法的问题是我的路由器文件之外的任何重定向似乎都因同样的原因而失败。
创建文件
auth.js
添加函数并将其导出:
const checkAdminAuthenticatedSetup = () => (req, res, next) => { if(req.session.authenticated !== true) { return res.status(302).redirect('/setup/auth', {message: "Please enter password to continue setup"}) } else { next(); } } module.exports = { checkAdminAuthenticatedSetup }
在您的路由器文件中,
const auth = require("auth")
对于某些路线,请执行以下操作:
router.get('/financial', auth.checkAdminAuthenticatedSetup(), <---------- this line should check if there is a req.session.authenticated (= true) value, else redirect to another page /setup/auth function (req, res, next) { res.render("setup-banking-information"); });
问题
此重定向“失败”并显示以下消息:
>>> console.log(err)
NodeError: Invalid status code: [object Object] at ServerResponse.writeHead (_http_server.js:209:11) at ServerResponse.writeHead (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\on-headers\index.js:44:26) at ServerResponse.writeHead (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\on-headers\index.js:44:26) at ServerResponse._implicitHeader (_http_server.js:200:8) at write_ (_http_outgoing.js:585:9) at ServerResponse.end (_http_outgoing.js:702:5) at ServerResponse.end (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express-session\index.js:355:19) at ServerResponse.redirect (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\response.js:947:10) at C:\Users\CybeX\WebstormProjects\awesome-app\utils\auth.js:30:32 at Layer.handle [as handle_request] (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\layer.js:95:5) at C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:275:10) at Function.handle (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:174:3) at router (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:47:12) at Layer.handle [as handle_request] (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:317:13) at C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:284:7 at Function.process_params (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\router\index.js:335:12)
stack = "RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: [object Object]\n at ServerResponse.writeHead (_http_server.js:209:11)\n at ServerResponse.writeHead (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\on-headers\index.js:44:26)\n at ServerResponse.writeHead (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\on-headers\index.js:44:26)\n at ServerResponse._implicitHeader (_http_server.js:200:8)\n at write_ (_http_outgoing.js:585:9)\n at ServerResponse.end (_http_outgoing.js:702:5)\n at ServerResponse.end (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express-session\index.js:355:19)\n at ServerResponse.redirect (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\response.js:947:10)\n at C:\Users\CybeX\WebstormProjects\awesome-app\utils\auth.js:30:32\n at Layer.handle [as handle_request] (C:\Users\CybeX\WebstormProjects\awesome-app\node_modules\express\lib\ro"… (length: 2,501)
message = "Invalid status code: [object Object]"
__proto__ = RangeError {constructor: , name: , code: }
[[StableObjectId]] = 3
每次发生此重定向时(在路由器文件之外),此方法(内部app.js
)都会被命中
// error handler
app.use((err, req, res, next) => {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
此外,我注意到在“渲染”error.pug
页面之后,浏览器只是挂在它最初尝试加载的页面上,而不是在浏览器中渲染error
页面,浏览器只是永远加载。
解决方案
问和回答。这是一个简单的疏忽。
Express 不允许通过重定向方法解析附加信息,例如(在我的情况下)用于呈现页面的附加参数{ message: "..."}
格式/语法为redirect()
:
res.redirect([status,] path)
就我而言,我应该将其添加为一条消息。
推荐阅读
- html - 将 docx 转换为 html 时,从 docx w:p 添加段落元素(html p)id 作为 paraId
- python - 卡住并无法修复常见错误
- sqlite - 在第二个表中插入新值时,引用的外键 id 为空。我如何简单地从第一个表中选择 id 到第二个表?
- c - 定时器时间值在恢复后不递减
- java - 自动装配在 spring.factories SpringFactoriesLoader 初始化 bean 中不起作用
- jmeter - 在 URL 查询中具有值 {3D} 的 java.lang.IllegalArgumentException
- java - Ant 媒体服务器:线程“主”java.lang.UnsupportedClassVersionError 中的异常
- css - 有没有办法从另一个父文件夹 css react js 导入文件
- big-o - 如何使用 Big-O 的正式定义证明 y = n^2 不属于 O(1)?
- docker - 调整 docker swarm 模式的负载均衡器