为什么 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 评论