如何将我的 koa 路由拆分成单独的文件?中间件问题
How can I split my koa routes into separate files? Middleware problem
我正在尝试将 koa 路由拆分成单独的文件。
我的路线有这样的文件夹结构。
routes/
__index.js
auth.js
user.js
因此,如果尝试方法一意味着它运行良好。但是采用方法 2 的动态方式意味着它无法正常工作。所有路由都命中,这不是问题,但同时 auth 路由也在 middleware.isAuthorized.
方法一
const routesToEnable = {
authRoute: require('./auth'),
userRoute: require('./user')
};
for (const routerKey in routesToEnable) {
if (routesToEnable[routerKey]) {
const nestedRouter = routesToEnable[routerKey];
if (routerKey == 'authRoute') {
router.use(nestedRouter.routes(), nestedRouter.allowedMethods());
} else {
router.use(middleware.isAuthorized, nestedRouter.routes(), nestedRouter.allowedMethods());
}
}
}
module.exports = router;
方法二
fs.readdirSync(__dirname)
.filter(file => (file.indexOf(".") !== 0 && file !== '__index.js' && file.slice(-3) === ".js"))
.forEach(file => {
// console.info(`Loading file ${file}`);
const routesFile = require(`${__dirname}/${file}`);
switch (file) {
case 'auth.js':
router.use(routesFile.routes(), routesFile.allowedMethods());
break;
default:
router.use(middleware.isAuthorized, routesFile.routes(), routesFile.allowedMethods());
break;
}
});
module.exports = router;
我如何在没有中间件的情况下使用方法二来验证路由本身。谁能建议我在这里做错了什么。提前致谢。
问题已自行解决。以前我也曾在同一行中将路由与中间件组合在一起。
router.use(middleware.isAuthorized, routesFile.routes(), routesFile.allowedMethods());
但那是我用来定义路线的错误方式。 router.use() 对所有路由使用中间件。所以现在我只是将我的路线分成单独的路由器使用单独的路径。文档中提到Koa router
已解决的答案
fs.readdirSync(__dirname)
.filter(file => (file.indexOf(".") !== 0 && file !== '__index.js' && file.slice(-3) === ".js"))
.forEach(file => {
const routesFile = require(`${__dirname}/${file}`);
if (file !== 'auth.js') {
routesFile.stack.forEach(elem => { router.use(elem.path, middleware.isAuthorized); });
}
router.use(routesFile.routes(), routesFile.allowedMethods());
});
我正在尝试将 koa 路由拆分成单独的文件。 我的路线有这样的文件夹结构。
routes/
__index.js
auth.js
user.js
因此,如果尝试方法一意味着它运行良好。但是采用方法 2 的动态方式意味着它无法正常工作。所有路由都命中,这不是问题,但同时 auth 路由也在 middleware.isAuthorized.
方法一
const routesToEnable = {
authRoute: require('./auth'),
userRoute: require('./user')
};
for (const routerKey in routesToEnable) {
if (routesToEnable[routerKey]) {
const nestedRouter = routesToEnable[routerKey];
if (routerKey == 'authRoute') {
router.use(nestedRouter.routes(), nestedRouter.allowedMethods());
} else {
router.use(middleware.isAuthorized, nestedRouter.routes(), nestedRouter.allowedMethods());
}
}
}
module.exports = router;
方法二
fs.readdirSync(__dirname)
.filter(file => (file.indexOf(".") !== 0 && file !== '__index.js' && file.slice(-3) === ".js"))
.forEach(file => {
// console.info(`Loading file ${file}`);
const routesFile = require(`${__dirname}/${file}`);
switch (file) {
case 'auth.js':
router.use(routesFile.routes(), routesFile.allowedMethods());
break;
default:
router.use(middleware.isAuthorized, routesFile.routes(), routesFile.allowedMethods());
break;
}
});
module.exports = router;
我如何在没有中间件的情况下使用方法二来验证路由本身。谁能建议我在这里做错了什么。提前致谢。
问题已自行解决。以前我也曾在同一行中将路由与中间件组合在一起。
router.use(middleware.isAuthorized, routesFile.routes(), routesFile.allowedMethods());
但那是我用来定义路线的错误方式。 router.use() 对所有路由使用中间件。所以现在我只是将我的路线分成单独的路由器使用单独的路径。文档中提到Koa router
已解决的答案
fs.readdirSync(__dirname)
.filter(file => (file.indexOf(".") !== 0 && file !== '__index.js' && file.slice(-3) === ".js"))
.forEach(file => {
const routesFile = require(`${__dirname}/${file}`);
if (file !== 'auth.js') {
routesFile.stack.forEach(elem => { router.use(elem.path, middleware.isAuthorized); });
}
router.use(routesFile.routes(), routesFile.allowedMethods());
});