我想更新我的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调用,调用我的逻辑,然后调用我的控制器,在那里我处理所有的数据库工作。
我的快速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
字段,然后将填充的文档作为我的回复返回。
我从mongoose的文档中知道execPopulate()
返回一个解析为已填充文档的承诺,但是当我在console.log中将结果发送到我的快速api调用时,我得到了#34; undefined&#34 ;
我还在这里学习,所以我可能忽略了一些非常明显的事情。
任何人对我做错了什么都有任何想法?或者我应该采用不同的方向,以便我能够实现能够创建新文档,填充它,然后在我的响应对象中返回它的总体目标。
谢谢!