我有一个expressJS
RESTapi
项目。
我的文件夹结构是这样的。
/
/src
/routes
/controller
/models
/app.js
在我的路线文件夹中
/routes
/banners.routes.js
/reviews.routes.js
/users.routes.js
banners.routes.js 文件如下所示
const express = require('express');
const router = express.Router();
const passport = require('passport');
// eslint-disable-next-line no-unused-vars
const passportConf = require('../../passport');
const controller = require('../controllers/banner.controller');
router.post('/', passport.authenticate('jwt', { session: false }), controller.read);
module.exports = router;
在我的 app.js 文件中
const banners = require('./src/routes/banners.routes');
const users = require('./src/routes/users.routes');
const reviews = require('./src/routes/reviews.routes');
app.use('/banners', banners);
app.use('/users', users);
app.use('/reviews', reviews);
现在只有我三个。如果我有100条不同的路线,则需要执行100次,这效率很低。应该有一种自动化的方法。
我想到了stackoverflow问题,因此可以找到RESTapis的解决方案。我创建了一个名为 index.js 的文件,并将此代码段添加到该文件中
const fs = require('fs');
const path = require('path');
const basename = path.basename(__filename);
fs
.readdirSync(__dirname)
.filter(file => (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'))
.forEach((file) => {
console.log(file)
});
这将记录所有这样的文件名。
banners.routes.js
reviews.routes.js
users.routes.js
有没有办法自动执行此路由选择?
希望我的问题对您很清楚。
答案 0 :(得分:1)
假设遵循某些命名约定,则可能需要所有文件并实例化所有路由。对于您的具体情况,<name>.routes.js
处理/<name>
路线
const fs = require('fs');
const path = require('path');
const POSTFIX = '.routes.js'
// generate [[name, handler]] pairs
module.exports = fs
.readdirSync(__dirname)
.filter(file => file.endsWith(POSTFIX))
.map(file => [path.basename(file, POSTFIX), require(`./${file}`)]);
然后在app.js中
const routes = require('./src/routes')
routes.forEach(([name, handler]) => app.use(`/${name}`, handler))