在Node Express应用程序的模块中使用变量

时间:2015-06-28 10:16:28

标签: javascript node.js express module

express生成器创建一个这样的应用程序: 在主app.js中:

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

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

使用我在index.js中的app.js中定义的变量的最佳方法是什么? 例如,在定义路由之前,我设置了mongoose模型:

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”?

2 个答案:

答案 0 :(得分: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;

这样,如果您想在 routes / 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});    
    });
});

答案 1 :(得分: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);
//...