【发布时间】:2017-12-30 18:10:46
【问题描述】:
我使用节点 js 开发了一个 REST API 并使用 MongoDB 表达。 我开发了一个端点来将用户插入数据库并且工作正常。现在我已经用 jwt 添加了登录功能,现在当我运行我的应用程序并尝试插入我的用户时,我收到了这个错误:
an app is listening on port 3000
(node:3650) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Expected "payload" to be a plain object.
(node:3650) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我正在使用节点 js 版本:Mac 上的 8.9.3 请帮忙?
@这是关于用户添加的代码:
var router = require('express').Router();
var bcrypt = require('bcryptjs');
var User = require('../models/user');
var jwt = require('jsonwebtoken');
var constants = require('../config/constants');
router.post('/',(req, res) => {
// add user --> user = { username: 'test', email: 'test@tes.com', pwd: 'Test'}
var user = new User({
username: req.body.user.username,
email : req.body.user.email,
passhash: bcrypt.hashSync(req.body.user.pwd, 10)
});
user.save().then(
(newuser) => {
var sessionToken = jwt.sign(newuser._id, constants.JWT_SECRET, {expiresIn: 60*60*24});
res.json({
user: newuser,
message: 'success',
sessionToken: sessionToken
});
},
(err) => {
res.send(500, err.message);
}
);
});
module.exports = router;
这是关于登录的代码:
var router = require('express').Router();
var bcrypt = require('bcryptjs');
var jwt = require('jsonwebtoken');
var constants = require('../config/constants');
var User = require('../models/user');
router.post('/', (req, res) => {
User.findOne({ username: req.body.user.username}).then(
(user) => {
if(user){
bcrypt.compare(req.body.pwd, user.passhash, (err, matches) => {
if (matches) {
var sessionToken = jwt.sign(user._id, constants.JWT_SECRET, { expiresIn: 24*60*60 });
res.json({
user:user,
message: 'succesfully authed',
sessionToken: sessionToken
});
}else{
res.json({
user: {},
message: 'failed to auth',
sessionToken: ''
});
}
});
}else{
res.json({
user: {},
message: 'failed to auth',
sessionToken: ''
});
}
},
(err) => {
// could not find users
res.json(err);
}
);
});
module.exports = router;
我用邮递员测试了添加用户,我发现当我收到发布的消息时,用户被插入到数据库中
【问题讨论】:
-
您应该编辑您的问题并添加一些重现问题的最少代码。
-
是的,但日志并没有告诉我有错误的文件。什么文件可以帮助确定问题?
-
既然您发现问题是在您添加登录功能时发生的,也许您的登录功能中的代码可能是一个好的开始。
-
好的。我在原始帖子中添加了代码。
-
在 user.save 和 User.findOne 之后放置一个 .catch 并打印出错误,以便我们查看确切的问题。