MikeF
MikeF

Reputation: 477

How to call model from inside route?

Not 100% certain if what I want to achieve is the correct way of doing it, so please correct me if I'm wrong.

I'm building a nodejs, express & passport website/app.

In my routes.js, I have the following section:

/* GET Home Page */
router.get('/dashboard', isAuthenticated, function(req, res){
    res.render('dashboard', { 
        user: req.user,
        sess: req.session
    });
});

After the user is logged in, it displays the 'dashboard'. On that 'dashboard' I'd like to include 10 of their recent logbook entries. I have logbook.js model set up, I'm just unsure how to call it.

My function within models/logbook.js is:

function getLatestEntries(req, res, user){
Logbook.find({ 'uid' :  user.uid }, {}, { limit: 10}, function(err, logbook){
    return logbook;
});
}

Contents of logbook.js:

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var logbookSchema = new Schema({
    id: String,
    uid: String,
    lid: { type: String, unique: true},
    callsign: String,
    contact: String,
    start: String,
    end: String,
    band: String,
    mode: String,
    RSTsent: String,
    RSTrec: String,
    notes: String
});
var Logbook = mongoose.model('Logbook', logbookSchema);
function getLatestEntries(req, next){
    Logbook.find({ 'uid' :  sess.uid }, {}, { limit: 10}, function(err, logbook){
         if (err){
             console.log("Error"+err)
             return next(err, null);
         }

         return next(null, logbook);
    });
}

module.exports.getLatestEntries = getLatestEntries;
// make this available to our users in our Node applications
module.exports = Logbook;

Upvotes: 2

Views: 677

Answers (1)

Kevin
Kevin

Reputation: 554

In your routes.js:

var Logbook = require('./models/logbook'); // change path if it's wrong

/* GET Home Page */
router.get('/dashboard', isAuthenticated, function(req, res, next) {
    Logbook.find({ 'uid' :  req.user.uid }, {}, { limit: 10}, function(err, logbook){
        if (err) { console.log(err); return next(); }

        res.render('dashboard', { 
           user: req.user,
           logbook: logbook
        });
    });
});

In your models/logbook.js:

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var logbookSchema = new Schema({
    id: String,
    uid: String,
    lid: { type: String, unique: true},
    callsign: String,
    contact: String,
    start: String,
    end: String,
    band: String,
    mode: String,
    RSTsent: String,
    RSTrec: String,
    notes: String
});
var Logbook = mongoose.model('Logbook', logbookSchema);

// make this available to our users in our Node applications
module.exports = Logbook;

Upvotes: 1

Related Questions