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 呼び出しをセットアップしました。これにより、ロジックが呼び出され、次にコントローラーが呼び出され、そこですべてのデータベース作業が処理されます。

私のエクスプレス 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()ますが、エクスプレスAPI呼び出しで結果をconsole.logにすると、「未定義」になります。

私はまだここで学んでいるので、非常に明白なことを見落としている可能性があります。

私が間違っていることについて誰か考えがありますか?それとも、新しいドキュメントを作成してデータを入力し、応答オブジェクトで返すという全体的な目的を達成できるようにするために、別の方向に進む必要がありますか?

ありがとうございました!

4

0 に答える 0