【问题标题】:Splitting express app.get in multiple files将 express app.get 拆分为多个文件
【发布时间】:2021-03-12 01:13:44
【问题描述】:
有没有什么方法可以拆分而不需要声明每个app.get?
像这样,我必须为每条路线添加一个新的 app.get。
app.get('/', require('./modules/menu'))
目标是让它自动化,所以它会获取路径、参数和东西并发送到正确的文件。
谢谢!
【问题讨论】:
标签:
node.js
express
file
split
【解决方案1】:
将所有 URL 处理函数放在单独的文件中,例如,将所有这些处理函数放在目录 ./modules 中的文件中。
示例处理程序文件:
function handle(req,res){
res.send("file1");
}
module.exports = handle;
使用for 循环为应用创建路由:
const glob = require("glob");
const glob_promise = require("glob-promise");
var log = console.log;
var files = [];
async function main(){
files = await glob_promise("./modules/**/*.js");
log(files);
for (let i=0; i<files.length; i++){
let file = files[i];
let url_path = file.replace("./modules","").replace(".js","");
log(url_path);
app.get(url_path, require(file))
}
}
main();
【解决方案2】:
这就是我使用 express 的方式
app/
routes/
controllers
app.js
您可以使用 app.js 导入控制器和路由的文件
const routes1 = require("./routes/route1.json")
const routes2 = require("./routes/route2.json")
在 routes/route1.json 中,您可以为这些路由导入控制器:
let express = require('express')
const authTokenController = require("../controllers/auth/token")
let api = express.Router()
api.post('/my-controller', myController.myMethod)
module.exports = api
好处是您可以将对象用作控制器
class myController {
myMethod(request, response) {
}
}
module.exports = new authTokenController
所以现在您可以将组织良好的应用加载到 express 中
app.use('/api', routes1)
app.use('/app', routes2)