Express - 路由分离方法

7

我正在寻找在Express中分离路由的最佳方法。我知道两种方法,想知道它们之间的区别和哪个被认为是“最佳实践”(以及为什么)。

第一种方法 - exports导出

许多示例似乎使用此方法

app.js

var user = require('./routes/users');
app.get('/users', user.list);

routes/users.js

exports.list = function(req, res){
  res.render('users', { title: 'Users', users: users });
};

第二种方法 -

这种方法在快速指南中使用。

app.js

var users = require('./routes/users');
app.use('/users', users);

routes/users.js

var express = require('express');
var router = express.Router();

router.get('/', function(req, res){
  res.render('users', { title: 'Users', users: users });
});

module.exports = router;

所以,正如我上面所说的,哪种方法更受欢迎,为什么?
1个回答

16

第三种方法 - 综合应用

你应该同时利用 Express 4 中引入的路由和你的控制器模块化。

app.js

var routes= require('./routes');
app.use('/', routes);

路由/index.js

var express = require('express');
var users = require('../routes/users');
var router = express.Router();

router.use('/users', users);

module.exports = router;

路由/用户.js

var express = require('express');
var users = require('../controllers/users');
var router = express.Router();

router.get('/', users.list);

module.exports = router;

控制器/controllers/users.js

exports.list = function(req, res){
  res.render('users', { title: 'Users', users: users });
};

谢谢您的回答,这种方法是否存在与之相关的性能问题? - Ash
1
@AshleyB 不应该有影响,因为app.get等方法内部已经使用了路由器。 - Ben Fortune
谢谢,我只是好奇请求流程会像这样:app.js -> router/index.js -> router/users.js -> controllers/users.js -> views/users/user.hjs看起来并不是最有效的方法。但我会尝试一下,谢谢! - Ash
1
不要忘记模块是被缓存的,因此它不会在运行时影响I/O性能。 - Ben Fortune
这正是我所需要的。非常有帮助!谢谢。 - Fernando Zabin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接