我想更新创建新文档的 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 调用中得到结果时,我得到“未定义”。
我仍然在这里学习,所以我可能忽略了一些非常明显的东西。
有人对我做错了什么有任何想法吗?或者我应该采取不同的方向,以便我可以实现能够创建新文档、填充它,然后在我的响应对象中返回它的总体目标。
谢谢!