我正在研究一个使用节点/ express API和Mongo进行存储的项目。我有一个函数尝试使用下面的屏幕快照中的代码从存储中检索数据。我对async / await的理解是,在等待时,代码的执行将暂停,并在解决诺言后继续进行。
但是,我一直面临的问题是屏幕快照中的函数返回的数据始终为空,实际上,当记录存在于db中时,子段也将正确传递。我开始相信我缺少关于异步/等待的概念。谁能帮我这个忙。我在这里做错什么了吗?
调用函数如下:
async create(req, res, next) {
debug(chalk.blue(`*** Create RSVP`));
console.log(req.body.event); //event is defined and matches db
const event = await Event.findBySlug(req.body.event);
console.log(event); // logs null here
}
被调用函数:
async function findBySlug(slug) {
return await Model.findOne({ slug: slug })
.populate('user')
.populate('category')
.exec();
}
答案 0 :(得分:0)
我已经运行了您的代码,findBySlug应该工作正常。以下是适合您的示例代码。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/database-name', {useNewUrlParser: true});
const UserSchema = new mongoose.Schema({
username: String
})
const CategorySchema = new mongoose.Schema({
name: String
})
const PostSchema = new mongoose.Schema({
content: String,
author: {
type: ObjectId,
ref: 'User'
},
category: {
type: ObjectId,
ref: 'Category'
}
})
const Post = mongoose.model('Post', PostSchema, 'posts');
const User = mongoose.model('User', UserSchema, 'users');
const Category = mongoose.model('Category', CategorySchema, 'categories');
async function findBySlug() {
return await Post.findOne({ content: "content name" })
.populate('author')
.populate('category')
.exec();
}
(async function run() {
const event = await findBySlug();
console.log(event); // logs not null here
}())
答案 1 :(得分:0)
像这样更新您的findBySlug方法就足够了。
function findBySlug(slug) {
return Model.findOne({ slug: slug })
.populate('user')
.populate('category')
.exec();
}