2015-06-28 1 views
0

Экспресс генератор создает приложение, как это: в основных app.js:Использование переменных в модулях приложения Node Экспресс

var app = express(); 
//... 
var routes = require('./routes/index'); 
app.use('/', routes); 
//... 

в маршрутах/index.js

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 

Что лучший способ использовать переменные, которые я определяю в app.js в index.js? Например, перед определением маршрутов, я создал модель мангуста:

var myModel; 

mongoose.connect('mongodb://localhost/test'); 
var db = mongoose.connection; 

db.once('open', function (callback) { 
    //load schemas 
    var dbSchema = require('./schema'); 
    myModel = mongoose.model('mymodel', dbSchema.myModel); 
}); 

Как я могу использовать «MyModel» в модуле маршрутов?

ответ

1

Вы должны определить свои модели за пределами app.js, в их собственной отдельной файлы для каждой отдельной модели и экспортировать эту модель, которую вы можете затем require в разных местах, в которой вы нуждаетесь. Ваше определение модели на самом деле не нужно быть внутри db.once('open'

Например: если у вас есть модель пользователя вы должны определить его в отдельном файле, как это:

дб/user.js

var mongoose = require('mongoose'); 
var schema = mongoose.Schema({ 
    … 
}); 
var model = mongoose.model('user', schema); 
module.exports = model; 

Таким образом, если вы хотите использовать модель пользователя в ваших маршрутов/index.js:

… 
var User = require('../db/user'); 
router.get('/user/:id', function(req, res, next) { 
    User.findById(req.params.id, function(err, user){ 
     res.render('user', { title: 'Express', user: user});  
    }); 
}); 
0

Передайте его как параметр, когда требуется ваш маршрутизатор в файле app.js. Вы будете иметь, чтобы немного изменить ваш index.js файл

var express = require('express'); 
var myRouter = function(myModel) { 
    var router = express.Router(); 

    /* GET home page. */ 
    router.get('/', function(req, res, next) { 
     res.render('index', { title: 'Express' }); 
    }); 

    // You can use your myModel model here 

    return router; 
} 

module.exports = myRouter 

Теперь внутри вашего app.js

var app = express(); 
//... 
// Pass myModel as a parameter 
var routes = require('./routes/index')(myModel); 
app.use('/', routes); 
//...