NodeJS 为什么路由到'name'不起作用,而它对'id'起作用?

68de4m5k  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(146)

我在mysql上有本地后端,我使用connect Node.js连接它们。一切正常。连接是成功的所有查询都在发生,但为什么这不工作。

router.get("/:users/:name", (req, res) => {
  const { name } = req.params;
  console.log(req.params);
  mysqlConnection.query(
    "SELECT * FROM user WHERE name = ?",
    [name],
    (error, rows, fields) => {
      console.log(rows);
      console.log(error);
      if (!error) {
        res.json(rows);
      } else {
        console.log(error);
      }
    }
  );
});

而它的对应物在工作。

router.get("/:users/:id", (req, res) => {
  const { id } = req.params;
  mysqlConnection.query(
    "select * from user where id = ?",
    [id],
    (error, rows, fields) => {
      if (!error) {
        res.json(rows);
      } else {
        console.log(error);
      }
    }
  );
});

我正在使用Postman来测试我的路由。例如:localhost:8080\users\name
我试过这个

router.get("/:users/:name", (req, res) => {
  const { name } = req.params;
  console.log(req.params);
  mysqlConnection.query(
    `SELECT * FROM user WHERE name = '${name}'`,
    (error, rows, fields) => {
      console.log(rows);
      console.log(error);
      if (!error) {
        res.json(rows);
      } else {
        console.log(error);
      }
    }
  );
});
pgky5nke

pgky5nke1#

这里的问题是Express无法区分:id:name;它们都只是单个字符串参数,因此任何匹配的请求都将被路由到先注册的任何一个。
假设id是数字,您可以提供更多的匹配信息,以便Express知道将像/users/123这样的请求路由到哪里

// register the more specific route first
router.get("/users/:id(\\d+)", (req, res) => {
  const { id } = req.params;

  // etc...
});

// register the more general route second
router.get("/users/:name", (req, res) => {
  const { name } = req.params;

  // etc...
});

请参见路径参数

相关问题