我如何创建一个新文档,填充它,然后将其作为json发回?

时间:2015-12-12 04:03:26

标签: node.js mongodb express mongoose mongoose-populate

我想更新我的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 ;

我还在这里学习,所以我可能忽略了一些非常明显的事情。

任何人对我做错了什么都有任何想法?或者我应该采用不同的方向,以便我能够实现能够创建新文档,填充它,然后在我的响应对象中返回它的总体目标。

谢谢!

0 个答案:

没有答案