由于nodejs
无法直接在所需文件中使用变量,我想创建一个模型对象,通过它我可以访问我的所有模型。例如,我有这样的事情:
function User() {
this.get = function () {
console.log('getSomeUser');
}
}
function Post() {
this.send = function () {
console.log('sendSomePost');
}
}
module.exports = function Model () {
this.User = User();
this.Post = Post();
};
然后我需要它,并且应该像这样使用:
var Model = require('model.js');
var model = new Model();
model.User.get();
model.Post.send();
有可能吗?
答案 0 :(得分:0)
除了您的module.exports
必须如下之外,这是有效的:
module.exports = function Model () {
this.User = new User();
this.Post = new Post();
};
User
和Post
需要是实例化对象,以便按照您的方式使用它们。您可能还需要model.js
,如下所示:
var Model = require('./model.js');
答案 1 :(得分:0)
我个人更喜欢这种方法:
module.exports = function(app){
var somelib = require('../path/somelib')(app),
//a 'private' method
function somethingPrivate(callback){
callback();
};
return {
User: function (req, res) {
somethingPrivate();
console.log('getSomeUser');
},
Post: function(req, res) {
console.log('sendSomePost');
}
}
}
现在请注意我正在将(app)传递给此函数。这样,如果需要,我可以访问已在init上加载的特定应用程序。但这不是必需的。
然后我在其他地方这样做,比如我的控制器:
module.exports = function(app){
var Model = require('../path/to/Model')(app);
app.get('/user', Model.User);
}
所以让我们仔细看看,如果你不想沿链传递应用程序,那么只需执行以下操作:
module.exports = function(){
//a 'private' method
function somethingPrivate(callback){
callback();
};
return {
User: function (req, res) {
somethingPrivate();
console.log('getSomeUser');
},
Post: function(req, res) {
console.log('sendSomePost');
}
}
}
然后在其他地方你做:
var Model = require('../path/to/Model');