我使用express和mongoDB(使用mongoose)实现一个简单的本地身份验证,并且由于某种原因,服务器会为用户发回一个空的响应对象,但令牌会在响应中发送。我在返回之前立即包含了一个console.log语句,尝试稍微调试它,并且在那里记录的对象是包含所有数据的正确对象。这就是创建代码的样子
import mongoose from 'mongoose';
import jwt from 'jsonwebtoken';
import json from '../helpers/json';
var User = mongoose.model('User');
module.exports = function() {
var obj = {};
obj.create = function (req, res) {
var roles = ['authenticated'];
User.count({}, (err, len) => {
if (!len) {
roles.push('admin');
}
var user = new User(req.body);
user.roles = roles;
user.provider = 'local';
user.token = jwt.sign(user, global.config.secret, {expiresIn: 10800});
user.save((err, user) => {
if (err) {
return json.bad(err, res);
}
json.good({
record: user,
token: user.token
}, res);
});
});
};
return obj;
};
就像我说的,我已经包含了一个console.log语句,用户将正确显示。
如果您想知道,json.good是我编写的辅助函数,基本上看起来像这样
module.exports = {
good: function (obj, res) {
res.send({
success: 1,
res: obj
});
},
bad: function (err, res) {
var obj = {
success: 0,
res: err
};
if (obj.res.errors) {
obj.res.messages = [];
for (var i in obj.res.errors) {
obj.res.messages.push(obj.res.errors[i].message;
}
obj.res.messages = obj.res.messages[0];
}
res.send(obj);
}
};
我也在我的快递文件中允许正确的标题和方法。这段代码与我之前使用过的代码完全相同,但我似乎错过了一些东西。
任何帮助将不胜感激,谢谢!
!!!!!!!固定固定!!!!
我发现了问题,这是在我的模型中。我有
UserSchema.methods = {
toJSON: function() {
var obj = this.toObject();
delete obj.password;
delete obj.following;
}
};
我忘记了最后回来的obj。谢谢大家!
答案 0 :(得分:0)
确保MongoDB中的值类型与变量类型匹配... 因此,如果您有一个名为'fav'的密钥,它是一个Int32,那么请确保您用来查找它的变量是Int32。