[英]ExpressJS RESTapi dynamically set routes
我有一個expressJS
RESTapi
項目。 我的文件夾結構是這樣的。
/
/src
/routes
/controller
/models
/app.js
在我的路線文件夾中
/routes
/banners.routes.js
/reviews.routes.js
/users.routes.js
banner.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
有沒有辦法自動執行此路由操作?
希望我的問題對您清楚。
假設您遵循某些命名約定,則可能需要所有文件並實例化所有路由。 對於您的特定情況, <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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.