Node.js:组织我的应用程序:在单独的文件中使用路由和模型,如何从路由中获取模型



我是node.js(和javascript)的新手,我正在学习如何为应用程序获得良好结构的教程。

首先,我想把我的路线放在一个单独的文件夹里。

假设这是我的main.js:

var express = require('express');
const PORT = 3000;
const app = express();
app.set("json spaces", 2);
require('./routes')(app);
app.listen(PORT, function() {
console.log(`users-jwt-api - Port ${PORT}`)
});

在我的"routes"文件夹中,我有两个文件:用于加载其他文件的index.js和user.js

index.js:

var fs = require('fs');
module.exports = function(app){
fs.readdirSync(__dirname).forEach(function(file) {
if (file == "index.js") return;
var name = file.substr(0, file.indexOf('.'));
require('./' + name)(app);
});
}

user.js:

module.exports = function(app) {
app.get('/users', function(req, res) {
//no bd yet, returning static data, and dont want it here, but in a model
res.json({users:[{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]});
});
};

这很有魅力!好的

但是,要明确的是,我不希望在我的路由文件中有任何数据库代码,所以我尝试添加一个"模型"文件夹。我放了一个index.js,就像放路由一样,还有一个users.js,如下所示:

module.exports = function(app) {
return {
findAll: function(params, callback) {
//no db yet
return callback([{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]);
}
};
};

我修改了我的main.js,在路由之前添加了这个:

require('./models')(app);

问题是,我不知道如何修改我的routes/user.js来调用这个模型!

我想在routes/users.js:中有这样的东西

module.exports = function(app) {
const Users = app.models.users; // not working here : TypeError: Cannot read property 'users' of undefined
app.get('/users', function(req, res) {
Users.findAll({}, function(users) {
res.json({users: users});
});
});
};

如何通过应用程序var使用我的模型?

注意:我发现了一个名为"config"的模块用于依赖项注入的解决方案,但在使用这种powerfull快捷方式之前,我宁愿使用简单的编码。

感谢您的帮助!谢谢

如果要访问models,需要将其定义为app上的属性我认为这就是models.js的工作。您正在将应用程序传递给models.js,但根本不更改它。

我建议将models.js更改为更像这样:

module.exports = function(app) {
app.models = {
users : // import db and return users so routes can avail of them
};
};

最新更新