跟进问题:什么是代码“res.json(false);”在做什么?这不是在页面上打印错误而不是显示我想要的数据吗?
我正在查看以下示例代码。我知道.get(
是方法,/:characters?
是服务器路径。在这个搜索中,冒号和路径中的问号有什么意义?问题不应该出现在字符之前,因为它是一个查询吗?
app.get('/:characters?', function (req, res) {
var chosen = req.params.characters;
if (chosen) {
console.log(chosen);
for (var i = 0; i < characters.length; i++) {
if (chosen === characters[i].routeName) {
res.json(characters[i]);
return;
}
}
res.json(false);
} else {
res.json(characters);
}
});
答案 0 :(得分:4)
在这种情况下,问号表示可选参数&#34;字符&#34;。这允许端点可以具有值或不具有值。然后他们正在测试该参数以查看它是否包含在内。如果是这样,他们将遍历&#34;字符&#34;对象并将任何匹配的条目返回给用户指定的端点。
答案 1 :(得分:2)
最简单的答案:
:XXX
表示其是一个URL参数。 (即req.params.XXX
将获取XXX的内容)
?
表示该参数是可选的。 (即客户端用户不需要将此参数包含在URL中)。
所以:
/:characters?
允许:/
和/yoda
都可以点击此路线。
答案 2 :(得分:1)
:characters
实际上并不是查询字符串的一部分。它将成为网址的一部分。
url将类似于以下内容(假设您在本地和端口8080
上运行此服务器):
http://localhost:8080/abcdefg
在这种情况下,req.params.characters
将为'abcdefg'
在我看来,在路线定义中加上明确的问号是一个错误。我不完全确定该问号的用途是什么。
对于后续问题,它似乎正在做的是characters
变量(我假设在外部定义)characters[i].routeName
寻找匹配,并返回找到的值。如果没有找到任何值,那么当它发送回false
时(或尝试 - 说实话,我不确定如果您尝试使用res.json(false)
将表达什么,因为我不确定false
是否是有效的JSON)。
答案 3 :(得分:0)
这是一种正常情况,端点或资源可以包含一个意味着
的变量以facebook为例,如果你看到MarkZukerberg的时间线,那么端点或网址是
https://www.facebook.com/zuck
如果你看到自己的个人资料,那么zuck将被你的名字取代。所以这里的name参数是一个变量。
当变量是url的一部分时,我们先用快速语法中的冒号签名
如果我们想发送一些其他值作为查询参数,那么我们使用?标记告诉服务器以下字符串将是查询参数
?name=value&age=12&gender=male
和
res.json(false)
只会返回false,因为没有别的响应