【问题标题】: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'))

目标是让它自动化,所以它会获取路径、参数和东西并发送到正确的文件。

谢谢!

【问题讨论】:

  • @SweetChillyPhilly wdym?
  • 抱歉,不清楚您要做什么或寻求帮助。

标签: 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)
    

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多