[英]Express app.use routes with optional params
我正在嘗試在我的所有路線中向 Express 添加可選參數。 這是我的代碼的一部分:
const express = require('express');
const bodyParser = require('body-parser');
const apiRoutes = require('./routes/apiRoutes');
const app = express();
const port = process.env.PORT || 3000;
app.use(
'/api/:param?',
bodyParser.json({ limit: '50mb' }),
bodyParser.urlencoded({ extended: false, parameterLimit: 50000 }),
apiRoutes,
);
const server = app.listen(port, () => {
console.log(`Server is started on port *:${port}`);
});
我在 apiRoutes 文件中定義了所有路由,如下所示:
router.get('system/versionInfo', async (req, res) => {
console.log('return Version info');
});
router.get('system/info', async (req, res) => {
console.log('return system info');
});
我想要param?
是可選的,所以有時會通過有時不會。 現在,如果我不通過該param
,路由將返回 404 錯誤(未找到)。 如果我通過了,一切正常。
例如,如果我運行:
'/api/test/system/versionInfo'
一切都很好,但如果我跑
'/api/system/versionInfo'
它返回 404。我希望在這兩種情況下都返回有效路線。
由於 express 將 go 在所有尋找匹配的路線上,您可以將您的apiRoutes
傳遞給多個app.use()
調用,如下所示:
在 apiRoutes.js 中:
router.get('system/info', async (req, res) => {
console.log('return system info');
});
在 app.js 中:
app.use('/api/:param?',
(req, res, next) => {
if (req.params.param == "test") console.log("test param detected");
next();
},
apiRoutes,
);
app.use('/api', apiRoutes);
/api/test/system/info
路由將匹配第一條規則, api/system/info
路由將匹配第二條規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.