【问题标题】:ZEIT Now Serverless Functions - Routes with ParametersZEIT 现在无服务器函数 - 带参数的路由
【发布时间】:2020-02-03 19:11:49
【问题描述】:

我创建了 4 个无服务器路由

  • /api/list (GET)
  • /api/add (POST)
  • /api/update/:id (PUT)
  • /api/remove/:id(删除)

我将它们包含在 api/now.json 文件中,如下所示:

{"src": "/api/list", "dest": "./list.js", "methods": ["GET"]},
{"src": "/api/add", "dest": "./add.js", "methods": ["POST"]},
{"src": "/api/update/*", "dest": "./update.js", "methods": ["PUT"]},
{"src": "/api/remove/*", "dest": "./remove.js", "methods": ["DELETE"]}

不使用参数的 /api/list 和 /api/add 路由正在工作,但 /api/update 和 /api/remove 不起作用,因为我可能没有在 api 上使用正则表达式上面引用的 now.json 文件中的路径正确。

路由器的处理程序如下所示(仅相关路径)

app.put('/api/update/:id', (req, res) => {
  ...
});
module.exports = app;

【问题讨论】:

    标签: javascript express routes serverless vercel


    【解决方案1】:

    src 是您要匹配的传入请求路径,dest 是应该执行的文件。

    这意味着您的前两个不需要任何路由,因为访问/api/list 将执行您文件中的函数/api/list.js/api/add 将执行/api/add.js

    您可以在now.json 文件中使用rewrites 来定义类似于表达模式的路由:

    {
      "rewrites": [
        { "source": "/update/:id", "destination": "/api/update" },
        { "source": "/remove/:id", "destination": "/api/remove" }
      ]
    }
    

    /api/remove.js 中的示例函数如下所示:

    module.exports = (req, res) => {
      const { id } = req.query;
      res.send('Removing ID ' + id);
    });
    

    或者,您可以将文件命名为 /api/remove/[id].js,然后您根本不需要定义 rewrites 配置。这称为Path Segments

    【讨论】:

    • 重写支持方法吗?
    • 没有。相反,如果您的函数不支持请求的方法,则应返回 HTTP 405 Status Method Not Allowed
    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2022-07-19
    • 1970-01-01
    • 2017-01-22
    • 2018-04-12
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多