此问题已在此处有答案:
How do I return the response from an asynchronous call?(41答案)
6年前关闭。
我用express和MongoDB(使用Mongoose)实现了一个简单的本地身份验证,由于某种原因,服务器为user发回了一个空的响应对象,但令牌在响应中被发送。我有一个控制台。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;
};
就像我说的,我有一个控制台。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);
}
};
我还允许在express文件中使用正确的头和方法。这段代码与我以前使用过的代码相同,但似乎缺少了一些东西。
更新
我发现了问题,就在我的模型里。我有
UserSchema.methods = {
toJSON: function() {
var obj = this.toObject();
delete obj.password;
delete obj.following;
}
};
最后我忘了把obj还回去。谢谢大家!
1条答案
按热度按时间8dtrkrch1#
确保MongoDB中的值类型与变量类型匹配。..所以如果你有一个名为'fav'的键,它是一个Int32,然后确保你用来查找它的变量是一个Int32。