拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 为什么Express.js识别的URL不像我们看到的通常的URL?

为什么Express.js识别的URL不像我们看到的通常的URL?

白鹭 - 2022-01-26 2105 0 0

为什么 Express.js 可以识别的 URL,不像我们看到的通常的 URL?

例如:Express.js 将识别这个 URL (http://localhost:3000/things/0) 如果我发出这个 GET 请求,其中 id=0:

app.get('/things/:id', (req, res) => {
   // Do somethihng
});

但是这个 URL (http://localhost:3000/things/?id=0) 更象是我们看到的常见 URL,它不适用于上面的相同 GET 请求。

uj5u.com热心网友回复:

它是一个框架,它不会像你我想的那样做。它有一套规则。谈到RESTFUL API 的最佳实践,设计是 path params( /:id) 用于识别特定资源或资源,而 query parameters( ?id) 用于对这些资源进行排序/过滤。所以,对于/things/?id=0,我们应该使用查询自变量。

它不会那样作业。为了获取查询自变量,请使用类似

app.get('/things', (req, res) => {
   let id = req.query.id;
// here you can get id.
});

查询自变量: 如何在 Node.js 上的 Express.js 中获取 GET(查询字符串)变量?

关于网址:https : //developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL

uj5u.com热心网友回复:

因此,“正常的 URL”显然是旁观者的眼中,因为实际上只是不同的样式,两者都不比另一个更正常。

有几种方法可以在 URL 中传递自变量。

#1 - 你可以将它嵌入到 URL 的路径中

https://someserver/things/0
https://contacts.google.com/person/c3429579852656514228

这被称为 RESTFUL 设计。这些 URL 包含一个名词,然后是一个标识 URL 所指的名词的 id。

#2 - 您可以将 URL 的可变部分放在查询自变量中

对于上面相同的两个 URL,可能如下所示:

https://someserver/things?id=0
https://contacts.google.com/person?id=c3429579852656514228

这两种设计都有合理的理由,具体取决于具体情况,甚至在某些情况下,您可以将两者结合起来(在选项 #1 中将可选查询自变量添加到 restful API 设计中。两者都不是“正常的” - 它们是设计 URL 的不同方式) .

Express 允许您使用其中任何一个。对于 URL 路径中的 restful 自变量,您可以使用:id语法并访问 中的值req.params.id

app.get('/things/:id', (req, res) => {
   console.log(req.params.id);
   res.send(req.params.id);
});

对于查询自变量,您无需在快速路由路径中定义它们。相反,Express 决议任何路由上存在的任何查询自变量,并使其在req.query.

// expecting /things?id=789&sort=alpha
app.get('/things', (req, res) => {
   console.log(req.query.id);            // "789"
   console.log(req.query.sort);          // "alpha"
   res.send(req.query.id);
});

URL 中存在的任何查询自变量都将添加到req.query物件中。

请注意,查询自变量通常被认为是可选的,因此您不会将它们编码到您的路由定义中。如果您需要特定的查询自变量,则必须检查它是否存在,如果不存在,则提供一些错误回应或呼叫next()以继续路由到其他请求处理程序。


仅供参考,还有另一种风格通常使用客户端代码来帮助构建该页面并将 URL 自变量也放入哈希标记中,但我将把它留到另一天。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *