ZEIT Now无服务器功能-带有参数的路由

时间:2020-02-03 19:11:49

标签: javascript express routes serverless vercel

我创建了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;

1 个答案:

答案 0 :(得分:3)

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

这意味着您不需要前两个路由,因为访问/api/list将执行文件/api/list.js中的功能,而/api/add将执行/api/add.js。 / p>

您可以在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