我有一个使用Express和Mongoose的节点应用程序。我在演示应用程序中看到过这一行,但我不明白它是如何工作的。
require('./db.js');
require('./routes.js')(app);
exports = mongoose = require('mongoose');
mongoose.connect('localhost:27017/test');
exports = Schema = mongoose.Schema;
require('./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);
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');
三个作业中间的变量名称是其他文件中可用的名称。
有人可以解释这里发生了什么以及它是如何工作的吗?
谢谢!
答案 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);
});
};