使用NodeJS保存填充模型

时间:2016-10-13 11:10:47

标签: javascript node.js express mongoose

我正在使用NodeJS + Express + MondoDB开发我的第一个应用程序,但我遇到了一些问题。

起初我有两个模型:

user.js的

var mongoose = require('mongoose'),
Schema   = mongoose.Schema;

var user_schema = new Schema({
_id                 : Number,
userName            : String,
jobList             : [{ type: Schema.Types.ObjectId, ref: 'Job' }]
});

var User = mongoose.model('User', user_schema);

job.js

var mongoose = require('mongoose'),
Schema   = mongoose.Schema;

var job_schema = new Schema({
user              : { type: Number, ref: 'User' },
jobName           :   String,
outputFile        :   String,
status            :   String
});

var Job = mongoose.model('Job', job_schema);

基本上,每个用户都有一份工作清单。因此,每次运行作业时,我都会搜索用户并将此作业添加到他的列表中。为简单起见,我创建了一个名为jobs.js的“控制器”:

var User  = require('../models/user.js');
var Job  = require('../models/job.js');

exports.addJob = function(req, res) {

    var user = new User({
        _id               :   0,
        userName          :   'guest'
    });

    user.save(function (err) {
        if (err) return handleError(err);
    });

    var job1 = new Job ({
        username          :    user._id,
        jobName           :   'jobname',
        outputFile        :   'myfile',
        status            :   'finished'
    });

    job1.save(function(err, job) {
        if(err) return res.status(500).send( err.message);
        res.send(JSON.stringify(job));
    });

}

最后,我的'server.js'

var express    = require('express');
var app        = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var jobsCtrl = require('./controllers/jobs');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8081;

var jobs = express.Router();
jobs.route('/addJob')
    .post(jobsCtrl.addJob);

app.use(jobs);

mongoose.connect('mongodb://localhost/morca', function(err, res) {
    if(err) {
        console.log('ERROR: connecting to Database. ' + err);
    } else {
        console.log('Connected to Database');
    }
});

app.listen(port);
console.log('Server listening at: ' + port);

好吧,当我在方法exports.addJob中向/ addJob发送POST时,我收到错误'对象不是函数'。我一直在寻找'存储填充模型',但似乎是正确的:http://mongoosejs.com/docs/populate.html

提前致谢。

1 个答案:

答案 0 :(得分:2)

您似乎没有export您的模特。

在这里,您只需在变量中分配模型。

var Job = mongoose.model('Job', job_schema);

尝试导出所有模型

module.exports= mongoose.model('Job', job_schema);
module.exports= mongoose.model('User', user_schema);