我有一个NodeJS Express应用程序在一个文件(app.js)中变得非常大。
我想将所有路由导出到一个外部文件中,比如./lib/routes.js
。怎么做?
如何导出以下代码并在主app.js
中正确使用?
app.get('/logout', function(req, res) {
res.render('logout', {
username: req.session.username
});
});
app.get('/dashboard', function(req, res) {
res.render('dashboard', {
username: req.session.username
});
});
app.get('/login', function(req, res) {
res.render('login', {
badLogin: false,
loginError: false
});
});
答案 0 :(得分:21)
我所做的是通过控制器对我的路线进行分组。对于每组相关路线(用户,购物车等),我制作一个位于app/controllers/foo.js
的控制器文件,其中foo
是控制器名称。在我的主要javascript服务器文件中(当前所有代码都存在),我require
按名称控制每个控制器,然后调用其setup
函数,传入我的快速app
对象,并允许控制器添加它需要的任何路线。
['api', 'authorization', 'users', 'tests'].map(function(controllerName) {
var controller = require('./controllers/' + controllerName);
controller.setup(app);
});
在每个控制器中,我做了类似的事情:
exports.setup = function(app) {
app.get('/dashboard', function(req, res) {
res.render('dashboard', {
username: req.session.username
});
});
};
答案 1 :(得分:7)
为什么不这样做:
// logout.js
module.exports = function(req, res){
res.render('logout', {
username: req.session.username
});
});
// dashboard.js
module.exports = function(req, res){
res.render('dashboard', {
username: req.session.username
});
});
// login.js
module.exports = function(req, res){
res.render('login', {
badLogin: false,
loginError: false
});
});
// app.js
app.get('/logout', require('logout'));
app.get('/dashboard', require('dashboard'));
app.get('/login', require('login'));
此外,您可以轻松地使用http://nodejs.org/docs/v0.4.8/api/fs.html#fs.readdir循环遍历 routes 目录并以编程方式加载它们。
你甚至可以做一些......
module.exports.handler[] = {
method : 'get',
route : '/login',
action : res.render('login', {
badLogin: false,
loginError: false
});
}
虽然我认为我会花一点时间考虑如何简化它。
答案 2 :(得分:0)
使用glob,您可以导出目录中的所有路由,例如“ / routes”:
npm i-保存glob
val dispatcher = Dispatcher(AsyncTask.THREAD_POOL_EXECUTOR as ExecutorService)
okHttpClientBuilder.dispatcher(dispatcher)
然后
在app.js上
IdlingResource