Reputation: 1288
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
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