Как мне создать новый документ, заполнить его, а затем отправить обратно как 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".

Я все еще учусь здесь, поэтому, возможно, я упустил что-то очень очевидное.

У кого-нибудь есть идеи о том, что я делаю не так? Или есть другое направление, в котором я должен идти, чтобы я мог выполнить общую задачу - создать новый документ, заполнить его, а затем вернуть его в свой объект ответа.

Спасибо!

0 ответов

Другие вопросы по тегам