异步/等待-节点-快速-Mongo

时间:2019-08-22 08:56:27

标签: javascript node.js mongodb express mongoose

我正在研究一个使用节点/ 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();
}

2 个答案:

答案 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();

}