![](/img/trans.png)
[英]Express.js routing. How to put a default route before all of my existing routes
[英]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.