假設我在檔案中定義了一個 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.jsapp匯入 express 應用程式,并在其所有路由前加上/api.
但是,通常我不想開發Nuxt應用程式的前端部分,我只想在后端進行更改。為此,我有一個像index.js上面這樣的幫助檔案,它只運行后端。(Frontend經常需要很長時間才能編譯,這就是為什么我不想在不需要的時候編譯它。)
這會產生一個問題,即所有路線都略有不同——它們缺乏/api一開始的路線。這些路由被用于不同的工具,如 Postman 等,突然間它們不起作用了。
我目前的解決方案是定義index.js在相同的方式,檔案server.js與定義的所有路由檔案中像我希望他們-而不是app.use('/foo', foo);有app.use('/api/foo', foo);等,但如果我改變這有其自身的問題,比如server.js我要改變index.js。我正在尋找更優雅的東西。
uj5u.com熱心網友回復:
根據 express 4.0 檔案https://expressjs.com/en/4x/api.html#app.use,您可以使用application與router. 簡而言之,只需將您的匯出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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322886.html
標籤:javascript 节点.js 表达 nuxt.js
上一篇:使用Socketio拖放
