Node.js:组织我的应用程序:在单独的文件中使用路由和模型,如何从路由中获取模型?
Node.js : organising my application : using routes and models in separate files, how can I get models from routes?
我是 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"}]});
});
};
这很有魅力!很好。
但是,需要说明的是,我不想在我的路由文件中包含任何数据库代码,所以我尝试添加一个 "models" 文件夹。我在里面放了一个 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});
});
});
};
如何通过 app var 使用我的模型?
注意:我找到了一个解决方案,其中包含一个名为 "config" 的模块,用于依赖项注入,但我宁愿在使用如此强大的快捷方式之前使用简单的编码。
感谢任何帮助!谢谢!
如果您想访问 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
};
};
我是 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"}]});
});
};
这很有魅力!很好。
但是,需要说明的是,我不想在我的路由文件中包含任何数据库代码,所以我尝试添加一个 "models" 文件夹。我在里面放了一个 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});
});
});
};
如何通过 app var 使用我的模型?
注意:我找到了一个解决方案,其中包含一个名为 "config" 的模块,用于依赖项注入,但我宁愿在使用如此强大的快捷方式之前使用简单的编码。
感谢任何帮助!谢谢!
如果您想访问 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
};
};