簡體   English   中英

使用可選參數表達 app.use 路線

[英]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.

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