我可以使用 fs.readdir 从 /routes/ 加载所有路由并使用 app.use(...) 挂载吗?

Can I load all routes from /routes/ with fs.readdir and mount with app.use(...)?

我正在尝试学习如何使用 Express,我注意到我的 app.js 中有一些重复,形式如下:

var index = require('./routes/index')
  , login = require('./routes/login')
  , register = require('./routes/register')
  , logout = require('./routes/logout')
  , posts = require('./routes/posts')
  , user = require('./routes/user');
app.use('/', index);
app.use('/login', login);
app.use('/register', register);
app.use('/logout', logout);
app.use('/posts', posts);
app.use('/user', user);

我想知道是否可以使用 fs.readdir 从 /routes 获取所有路由,然后运行 ​​app.use(...) 遍历它们。我第一次尝试:

routeFiles = fs.readdir('./routes/', function(err, files) {
  _.each(files, function(file) {
    name = file.split('.')[0]
    app.use("'/" + name + "', " + name);
  });
});

并出现以下错误:

TypeError: app.use() requires middleware functions
at Function.use (/Users/.../application.js:17

我猜这是因为一个字符串 ("name") 被传递给 app.use 而不是路由函数本身(如上面最初声明的所有其他变量声明)。接下来,我尝试在 _.each 函数中声明每个路由的函数变量,这样我就可以直接传递它们,而不仅仅是路由名称的字符串:

routeFiles = fs.readdir('./routes/', function(err, files) {
  _.each(files, function(file) {
    name = file.split('.')[0];
    app.use('\'/' + name + '\', ' + require('./routes/' + name));
  });
});

但是,我仍然收到以下错误:

/Users/.../lib/application.js:178
throw new TypeError('app.use() requires middleware functions');
      ^
TypeError: app.use() requires middleware functions
at Function.use (/Users/.../lib/application.js:178:11)

我一直在兜圈子,所以我希望这里有人能帮助我。请让我知道这是否是一个愚蠢的想法以及我不应该考虑的事情;正如我所说,我是 Express(和 JS,真的)的新手,所以我只是在玩和想知道。谢谢!

更新:这是一个示例路线,因此您可以看到我正在尝试加载的内容。在这种情况下,它是索引页的简单路由。

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

// [GET] index
router.get('/', function(req, res) {
  res.render('index', {
    title: 'Home',
    user: req.user
  });
});

module.exports = router;

您使用 require 的最后一种方法可能有效 - 您的路由文件必须如下所示:

module.exports = function(req, resp, next){
     // your middleware code here
};

这是因为路径情况下app.use的参数是路径和函数。