Как мне создать новый документ, заполнить его, а затем отправить обратно как json?
Я хотел бы обновить мой вызов API, который создает новый документ, чтобы создать новый документ, заполнить его, а затем вернуть ответ 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
поле, а затем вернуть заполненный документ в качестве моего ответа.
Я знаю из документов Мангуста, что execPopulate()
возвращает обещание, которое разрешается в заполненном документе, но когда я console.log результат в моем экспресс-вызове API, я получаю "undefined".
Я все еще учусь здесь, поэтому, возможно, я упустил что-то очень очевидное.
У кого-нибудь есть идеи о том, что я делаю не так? Или есть другое направление, в котором я должен идти, чтобы я мог выполнить общую задачу - создать новый документ, заполнить его, а затем вернуть его в свой объект ответа.
Спасибо!