Sergiodiaz53
Sergiodiaz53

Reputation: 1288

Saving populate models with NodeJS

I'm developing my first app with NodeJS + Express + MondoDB and I'm having some problems.

At first I have two models:

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);

Basically, each user have a list of jobs. So each time I run a job I search the user and add this job to his list. For simplycity I have created a 'controller' called 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));
    });

}

Finally, my '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);

Well, I'm getting an error 'Object is not a function' when I send a POST to /addJob in the method exports.addJob. I have been looking for 'storing populate models' but It seems to be correct: http://mongoosejs.com/docs/populate.html

Thanks in advance.

Upvotes: 0

Views: 305

Answers (1)

abdulbari
abdulbari

Reputation: 6232

It seems that you didn't export your models.

Here you are just assigning your models in a variable.

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

Try to export all your models like this

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

Upvotes: 2

Related Questions