admin管理员组文章数量:1323707
I'm implementing a password reset and when clicking on the generated link I'm getting the following error,
Thu Jan 25 2018 16:54:38 GMT+0000 (GMT): GET /users/reset/d590c54753abc449cfcd8aefceb8d519fce4b627
express deprecated res.redirect(url, status): Use res.redirect(status, url) instead routes/users.js:297:9
events.js:136
throw er; // Unhandled 'error' event
^
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: [object Object]
at ServerResponse.writeHead (_http_server.js:193:11)
at ServerResponse.writeHead (/Users/benbagley/Code/poetry-out-loud/node_modules/on-headers/index.js:55:19)
at ServerResponse._implicitHeader (_http_server.js:184:8)
at write_ (_http_outgoing.js:644:9)
at ServerResponse.write (_http_outgoing.js:629:10)
at writetop (/Users/benbagley/Code/poetry-out-loud/node_modules/express-session/index.js:290:26)
at ServerResponse.end (/Users/benbagley/Code/poetry-out-loud/node_modules/express-session/index.js:338:16)
at ServerResponse.redirect (/Users/benbagley/Code/poetry-out-loud/node_modules/express/lib/response.js:947:10)
at /Users/benbagley/Code/poetry-out-loud/routes/users.js:297:9
at model.Query.<anonymous> (/Users/benbagley/Code/poetry-out-loud/node_modules/mongoose/lib/model.js:4056:16)
at /Users/benbagley/Code/poetry-out-loud/node_modules/kareem/index.js:273:21
at /Users/benbagley/Code/poetry-out-loud/node_modules/kareem/index.js:131:16
at process._tickCallback (internal/process/next_tick.js:150:11)
[nodemon] app crashed - waiting for file changes before starting...
Here are my routes
// Token URL :get
router.get('/users/reset/:token', (req, res) => {
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}, function(err, user) {
if (!user) {
req.flash('error', 'Password reset token is invalid or has expired.');
res.redirect('/users/forgot');
}
res.redirect('reset.hbs', {
pageTitle: 'Reset Your Password',
user: req.user
});
});
});
// Token URL :post
router.post('/users/reset/:token', (req, res, next) => {
if(req.body.password === req.body['password-confirm']) {
next();
return;
}
req.flash('error', 'Passwords do not match!');
res.redirect('back');
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}, function(err, user) {
if(!user) {
req.flash('error', ' Password reset is invalid or has expired');
res.redirect('/login');
}
const setPassword = promisify(user.setPassword, user);
setPassword(req.body.password);
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
const updatedUser = user.save();
req.login(updatedUser);
req.flash('success_msg', 'Your password has been reset successfully! You are now logged in!');
res.redirect('/dashboard');
});
});
I think, I'm close to getting this to work, just a few errors I'm running into. This being one of them. I have checked the documentation and I'm not seeing anything mentioning status codes, I believe this is a change in the recent framework, seems quite odd having to define a status code for every redirect or render.
I'm implementing a password reset and when clicking on the generated link I'm getting the following error,
Thu Jan 25 2018 16:54:38 GMT+0000 (GMT): GET /users/reset/d590c54753abc449cfcd8aefceb8d519fce4b627
express deprecated res.redirect(url, status): Use res.redirect(status, url) instead routes/users.js:297:9
events.js:136
throw er; // Unhandled 'error' event
^
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: [object Object]
at ServerResponse.writeHead (_http_server.js:193:11)
at ServerResponse.writeHead (/Users/benbagley/Code/poetry-out-loud/node_modules/on-headers/index.js:55:19)
at ServerResponse._implicitHeader (_http_server.js:184:8)
at write_ (_http_outgoing.js:644:9)
at ServerResponse.write (_http_outgoing.js:629:10)
at writetop (/Users/benbagley/Code/poetry-out-loud/node_modules/express-session/index.js:290:26)
at ServerResponse.end (/Users/benbagley/Code/poetry-out-loud/node_modules/express-session/index.js:338:16)
at ServerResponse.redirect (/Users/benbagley/Code/poetry-out-loud/node_modules/express/lib/response.js:947:10)
at /Users/benbagley/Code/poetry-out-loud/routes/users.js:297:9
at model.Query.<anonymous> (/Users/benbagley/Code/poetry-out-loud/node_modules/mongoose/lib/model.js:4056:16)
at /Users/benbagley/Code/poetry-out-loud/node_modules/kareem/index.js:273:21
at /Users/benbagley/Code/poetry-out-loud/node_modules/kareem/index.js:131:16
at process._tickCallback (internal/process/next_tick.js:150:11)
[nodemon] app crashed - waiting for file changes before starting...
Here are my routes
// Token URL :get
router.get('/users/reset/:token', (req, res) => {
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}, function(err, user) {
if (!user) {
req.flash('error', 'Password reset token is invalid or has expired.');
res.redirect('/users/forgot');
}
res.redirect('reset.hbs', {
pageTitle: 'Reset Your Password',
user: req.user
});
});
});
// Token URL :post
router.post('/users/reset/:token', (req, res, next) => {
if(req.body.password === req.body['password-confirm']) {
next();
return;
}
req.flash('error', 'Passwords do not match!');
res.redirect('back');
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}, function(err, user) {
if(!user) {
req.flash('error', ' Password reset is invalid or has expired');
res.redirect('/login');
}
const setPassword = promisify(user.setPassword, user);
setPassword(req.body.password);
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
const updatedUser = user.save();
req.login(updatedUser);
req.flash('success_msg', 'Your password has been reset successfully! You are now logged in!');
res.redirect('/dashboard');
});
});
I think, I'm close to getting this to work, just a few errors I'm running into. This being one of them. I have checked the documentation and I'm not seeing anything mentioning status codes, I believe this is a change in the recent framework, seems quite odd having to define a status code for every redirect or render.
Share Improve this question edited Jan 25, 2018 at 18:47 Makoto 107k27 gold badges197 silver badges235 bronze badges asked Jan 25, 2018 at 17:03 user8331511user8331511 1- 2 If you have another question, please ask another question. It's poor form to edit your existing question with another question, as that runs the risk of invalidating prior answers. – Makoto Commented Jan 25, 2018 at 18:47
1 Answer
Reset to default 3You have to use res.render instead of res.redirect:
res.render('reset.hbs', {
pageTitle: 'Reset Your Password',
user: req.user
});
res.redirect method accept the route string as arguement while res.render accept a string that represent the file path of the view to render
本文标签:
版权声明:本文标题:javascript - RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: [object Object] error express 4.16 - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742129397a2422088.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论