0

我想更新创建新文档的 API 调用,以创建新文档,填充它,然后通过 express 返回 json 响应。

我的模型设置如下:

import mongoose from 'mongoose';
import constants from '../../constants/enums';

const DepartmentBudgetSchema = new mongoose.Schema({
    department : {
        type : String,
        enum : constants.departments
    },
    owner      : {
        type : mongoose.Schema.Types.ObjectId,
        ref  : 'Executive'
    },
    budget     : Number
});

export default mongoose.model('DepartmentBudget', DepartmentBudgetSchema);

我用我的快速路径设置了我的 API 调用,它调用我的逻辑,然后调用我的控制器,在那里我处理所有数据库工作。

我的 express api 调用如下所示:

import express from 'express';
import DepartmentsBudgetsLogic from './departmentBudget.logic.js';
import constants from '../../constants/enums';

const router = express.Router();
const code = constants.statusCode;

router.post('/', newDepartmentBudget);

async function newDepartmentBudget( req, res ) {
    try {
        const result = await new DepartmentsBudgetsLogic().newDepartmentBudget(req.body);
        console.log(result);
        res.status(code.created).json(result);
    }
    catch ( error ) {
        console.error('Unable to create department budget.', error);
        res.sendStatus(code.serverError);
    }
}

然后我的逻辑函数简单地调用我的控制器传递预算对象:

import DepartmentBudgetController from './departmentBudget.controller';

export default class DepartmentBudgetLogic {
    newDepartmentBudget( budget ) {
        return new DepartmentBudgetController().newDepartmentBudget(budget);
    }
}

最后,这就是我认为我遇到问题的地方,控制器处理猫鼬的工作:

import DepartmentBudget from './departmentBudget.model';

export default class DepartmentBudgetController {
    newDepartmentBudget( budget ) {
        DepartmentBudget.create(budget).then(function( budget ) {
            return budget.populate('owner').execPopulate();
        });
    }
}

该文档已在数据库中正确创建,但我真的很难用代码填充该owner字段,然后返回填充的文档作为我的响应。

我从猫鼬的文档中知道,它execPopulate()返回了一个解析为填充文档的承诺,但是当我 console.log 在我的快速 api 调用中得到结果时,我得到“未定义”。

我仍然在这里学习,所以我可能忽略了一些非常明显的东西。

有人对我做错了什么有任何想法吗?或者我应该采取不同的方向,以便我可以实现能够创建新文档、填充它,然后在我的响应对象中返回它的总体目标。

谢谢!

4

0 回答 0