我可以使用 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
的参数是路径和函数。
我正在尝试学习如何使用 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
的参数是路径和函数。