首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有不同输出的类似Express路由请求

具有不同输出的类似Express路由请求
EN

Stack Overflow用户
提问于 2019-10-23 18:41:19
回答 1查看 24关注 0票数 1

我编写了两个不同的Express路由请求,它们引用了一个对象(该对象具有相对于每部电影的电影和数据)。它们应该显示不同的结果,但在结构上完全相同。然而,一个有效,另一个无效。以下是代码:

电影片名

代码语言:javascript
复制
app.get("/movies/:title", (req, res) => {
  res.json(Movies.find((movie) => {
    return movie.title === req.params.title
  }));
});

电影按类型分类-这一部不起作用

代码语言:javascript
复制
app.get("/movies/:genre", (req, res) => {
  res.json(Movies.find((movie) => {
    return movie.genre === req.params.genre
  }));
});

它们指的是以下目标:

代码语言:javascript
复制
let Movies = [{
    id: 1,
    title: "Night of the Living Dead",
    genre: "Classical",
    director: {
      name: "George P. Romero",
      bio: "Lorem ipsum dolor sit amet",
      birth: "01/01/1900",
      death: "01/01/1900"
    },
    imgUrl: "https://z.com/1/img/thumb.jpg"
  },
  {
    id: 2,
    title: "28 days later",
    genre: "Apocalypse",
    director: {
      name: "Danny Boyle",
      bio: "Lorem ipsum dolor sit amet consectetur",
      birth: "01/01/1900",
      death: "01/01/1900"
    },
    imgUrl: "https://z.com/2/img/thumb.jpg"
  },
  {
    id: 3,
    title: "Cell",
    genre: "Apocalypse",
    director: {
      name: "Christopher Hatton",
      bio: "ipsum dolor sit",
      birth: "01/01/1900",
      death: "01/01/1900"
    },
    imgUrl: "https://z.com/3/img/thumb.jpg"
  }
];

第一种方法可以很好地处理请求本地主机:8080/ fine /Lorem,但第二个失败的是请求本地主机:8080/fine/Classical或任何其他类型。

Express的函数调用和文件顶部的应用程序都是正常的(它适用于第一个路由请求。

我很感激任何开悟。提前感谢您的光临。

EN

Stack Overflow用户

回答已采纳

发布于 2019-10-23 22:03:00

这是因为你在这两条路线上使用了相同的模式。您尝试将两条路由与模式匹配:/movies/:parameter。对于每个请求,Express尝试将请求路径与应用程序中已注册的urls匹配。在给定的例子中:

代码语言:javascript
复制
/movies/Lorem Ipsum # Match the /movies/:title
/movies/Classical # Match the /movies/:title

为什么?因为路由/movies/:title是声明顺序中的第一个。参数的名称不算在内,因为在发送请求时,express不知道"Lorem“是title,而"Classical”是genre!路由声明中的参数名称仅用于通过示例在您的处理程序中使用req.params.title调用它。

怎么解决这个问题?

改变您的模式,使用查询代替(https://expressjs.com/fr/api.html#req.query)!您可以使用以下表格:

代码语言:javascript
复制
GET /movies?genre=Classical
GET /movies?title=Lorem%20Ipsum

你会有这样一条路:

代码语言:javascript
复制
app.get('/movies', (req, res) => {
    if (req.query.title)
         // do title research
    else if (req.query.genre)
         // do genre research

    ...
});

玩得开心!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58529212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档