【发布时间】:2018-04-08 04:08:40
【问题描述】:
我在处理从诸如 findOne(作为示例)等异步函数返回的数据时遇到了麻烦,我似乎无法正确处理。
在此代码中,正在创建 new_user,我想处理 findOne 函数的响应,但由于异步运行,用户为 Null。我尝试了不同的方法,但我无法理解它。
var router = require('express').Router();
var mongoose = require('mongoose');
var user = require('../../Schemas/user');
router.get('/a', function (req, res, next) {
var new_user = new user({
"user_name": req.query.username, "first_name": req.query.firstname,
"last_name": req.query.lastname,
"email": req.query.email, "trips": []
});
user.findOne({ email: new_user.email }).exec(function (user) {
if (!user) { return res.sendStatus(401); }
else
return res.send(user);
});
});
module.exports = router;
我会假设这是同一件事,但我也尝试将查找代码放在另一个页面中并从 router.get('/a') 中调用它,但最终遇到了同样的问题。
api/user.js:
new_user.checkUser(new_user.email).exec(function (user) {
if (!user) {
return res.sendStatus(401);
}
else
return res.send(user);
})
用户架构:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
id: Number,
user_name: String,
first_name: String,
last_name: String,
email: { type: String, unique: true },
trips: [{ id: { type: Number } }]
},
{ collection: 'users' });
userSchema.methods.checkUser = function (newUser) {
return userM.findOne({ email: newUser }).exec(function (err, doc) {
return doc; //doc contains the document for sure
});
};
var userM = mongoose.model('user', userSchema);
module.exports = userM;
我知道这很简单,但现在一切都变得模糊了。我将不胜感激。
【问题讨论】:
-
有什么办法可以使用回调函数吗?
-
@prabhatmishra 虽然 Renato Gama 回答了这个问题,但我希望有任何改进建议。谢谢