【问题标题】:Node express request goes to other endpoint in router节点快速请求转到路由器中的其他端点
【发布时间】:2020-08-09 05:59:57
【问题描述】:

我想不通。为什么是我的要求:

localhost:3000/api/customers/search?q=glenn

前往:

  // Retrieve a single Customer with customerId
  router.get("/:customerId", customers.findOne);

什么时候到这里???

// Search for a customer.
  router.get("/search/:q", customers.search)

customer.routes.js

module.exports = app => {
  const customers = require("../controllers/customer.controller");

  const router = require("express").Router();

  // Create a new Customer
  router.post("/", customers.create);

  // Retrieve all Customers
  router.get("/", customers.findAll);

  // Search for a customer.
  router.get("/search/:q", customers.search)

  // Retrieve a single Customer with customerId
  router.get("/:customerId", customers.findOne);

  // Update a Customer with customerId
  router.put("/:customerId", customers.update);

  // Delete a Customer with customerId
  router.delete("/:customerId", customers.delete);

  // Create a new Customer
  router.delete("/", customers.deleteAll);

  app.use("/api/customers", router)
};

Morgan + Sequelize 日志:

正在执行(默认):SELECT id, email, name, active, createdAt, updatedAt FROM customers AS customer WHERE customer.id = '搜索'; ::1 - - [25/Apr/2020:16:41:06 +0000] “获取 /api/customers/search?q=glenn HTTP/1.1" 200 0 "-" “邮递员运行时/7.24.1”

【问题讨论】:

  • 从日志中,它正在搜索。检查您的搜索方法。那不是 findone 电话。

标签: javascript node.js express


【解决方案1】:

您的请求与路由器正在查找的内容不匹配,请将您的请求从 localhost:3000/api/customers/search?q=glenn 更改为 localhost:3000/api/customers/search/glenn

router.get("/search/:q", customers.search) 更改为router.get("/search", customers.search)

【讨论】:

  • 我更换了路由器。现在在我的控制器中,我无法获取查询字符串。 console.log("Search for: " + req.params.q)Search for: undefined
  • 您必须将其更改为 req.query.q
  • 谢谢! req.query.q 解决了。我以为只有req.paramsreq.body
  • 查询来自 url 中 ? 之后的任何内容,params 引用您的“动态”部分路由,例如:q,body 是发送到端点的内容
【解决方案2】:

你需要另外一个路由来处理,搜索不带“/:r”。

/search/:q 仅适用于类似查询

  • /search/test
  • /search/something

不是

  • /search?q=something

更新:

// Search for a customer.
  router.get("/search/:q", customers.search)

// Add this
// Search for a for query.
  router.get("/search", customers.search)

【讨论】:

  • 谢谢伙计。解释帮助很大,但乔的评论指出了我的错误。这个答案+乔尔的评论解决了这个问题。
猜你喜欢
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
相关资源
最近更新 更多