我正在尝试学习如何使用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;
答案 0 :(得分:1)
你使用require
的最后一种方法可行 - 你的路线文件必须看起来像这样:
module.exports = function(req, resp, next){
// your middleware code here
};
这是因为路径案例中app.use
的参数是路径和函数。