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

时间:2015-01-03 11:10:04

标签: node.js express

我正在尝试学习如何使用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;

1 个答案:

答案 0 :(得分:1)

你使用require的最后一种方法可行 - 你的路线文件必须看起来像这样:

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

这是因为路径案例中app.use的参数是路径和函数。