如何在节点表达app的单个文件中使用该行允许在其他文件中访问该变量?

时间:2012-08-11 08:13:15

标签: node.js express mongoose

我有一个使用Express和Mongoose的节点应用程序。我在演示应用程序中看到过这一行,但我不明白它是如何工作的。

app.js

require('./db.js');
require('./routes.js')(app);

db.js

exports = mongoose = require('mongoose');
mongoose.connect('localhost:27017/test');
exports = Schema = mongoose.Schema;

require('./models.js')

models.js

var ArticleSchema = new Schema({
    title       : {type : String, default : '', trim : true}
  , body        : {type : String, default : '', trim : true}
  , user        : {type : Schema.ObjectId, ref : 'User'}
  , created_at  : {type : Date, default : Date.now}
})


mongoose.model('Article', ArticleSchema);

routes.js

var Article = mongoose.model('Article');

module.exports = function(app){

    app.get('/new', function(req, res){
        var article = new Article({});
        res.render('new', article);     
    });
};

变量mongoose和schema如何在其他模块中可用,如models.js和routes.js?

如果我将演示中看到的exports = mongoose = require('mongoose');行更改为我更熟悉的其中任何一行,此代码仍可正常工作。

module.exports = mongoose = require('mongoose');
exports.anything = mongoose = require('mongoose');

三个作业中间的变量名称是其他文件中可用的名称。

有人可以解释这里发生了什么以及它是如何工作的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

<强> app.js

var db = require('./db.js');
require('./routes.js')(app, db);

<强> db.js

var mongoose;
module.exports.mongoose = mongoose = require('mongoose');
mongoose.connect('localhost:27017/test');
module.exports.Schema = mongoose.Schema;

require('./models.js')(module.exports);

<强> models.js

module.exports = function (db) {
    var ArticleSchema = new db.Schema({
        title       : {type : String, default : '', trim : true}
      , body        : {type : String, default : '', trim : true}
      , user        : {type : db.Schema.ObjectId, ref : 'User'}
      , created_at  : {type : Date, default : Date.now}
    })

    db.mongoose.model('Article', ArticleSchema);
};

<强> routes.js

module.exports = function (app, db) {
    var Article = db.mongoose.model('Article');

    app.get('/new', function(req, res){
        var article = new Article({});
        res.render('new', article);     
    });
};