簡體   English   中英

Express.js - 為所有定義的路由添加子路由

[英]Express.js - prepend sub-route to all defined routes

假設我在文件中定義了一個 Express 應用程序,比如server.js如下所示:

const app = express();

app.use('/foo', foo);
app.use('/bar', bar);

module.exports = app;

我在另一個文件中導入這個 Express 應用程序,比如index.js

const app = require('./server');

const port = process.env.PORT || 3000;

const listen = (port) => {
    app.listen(port, () => {
        console.log(`Backend listening on port ${port}!`);
    });
};

listen(port);

現在,此應用程序可用的路由是/foo/bar

有沒有辦法在index.js文件中編輯配置,使路由變成/api/foo/api/bar 不涉及server.js文件。

用例:

我有一個Nuxt.js與被加載到后端應用Nuxt通過應用serverMiddleware物業nuxt.config.js這樣的:

serverMiddleware: [
    ...
    { path: '/api', handler: '~/server.js' },
],

這與我上面描述的效果類似:它從server.js應用程序導入 express 應用程序,並在其所有路由之前添加/api

但是,通常我不想開發Nuxt應用程序的前端部分,我只想在后端進行更改。 為此,我有一個像上面的index.js這樣的幫助文件,它只運行后端。 (Frontend經常需要很長時間才能編譯,這就是為什么我不想在不需要的時候編譯它。)

這會產生一個問題,即所有路由都略有不同——它們在開始時缺少/api 這些路由被用於不同的工具,如 Postman 等,突然間它們不起作用了。

我目前的解決方案是以與server.js文件相同的方式定義index.js文件,並按照我想要的方式定義所有路由 - 而不是app.use('/foo', foo); app.use('/api/foo', foo); 等等,但這有其自身的問題,例如,如果我更改server.js我必須更改index.js 我正在尋找更優雅的東西。

根據 express 4.0 文檔https://expressjs.com/en/4x/api.html#app.use,您可以像使用router一樣使用application實例。 簡而言之,只需將server.js的導出用作要插入它的路由中的中間件,而不是直接在其上調用.listen()

這是一些對我有用的演示代碼:

const express = require('express');
const app_inner = express();
app_inner.use('/foo', (req,res) => res.send('foo'));

const app_outer = express();
app_outer.use('/foo2', app_inner);

app_outer.listen(9999);
// web browser at localhost:9999/foo2/foo returns 'foo' as expected

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM