在服务器path中用冒号和问号得到方法
后续问题:什么是代码“res.json(false);” 在做什么? 不是在页面上打印出错误而不是显示我想要的数据?
我正在看下面的示例代码。 我知道.get(
是方法和/:characters?
是服务器path。在这个search中,冒号和问号在path中有什么意义?问号不应该出现在字符之前,因为它是一个问题?
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); } });
在这种情况下,问号表示可选参数“字符”。 这允许可以有或没有值的端点。 然后他们testing这个参数是否包含在内。 如果是这样,他们将遍历“characters”对象,并将任何匹配的条目返回到用户指定的端点。
:characters
实际上不是查询string的一部分。 这将是url的一部分。
该url将类似于以下内容(假设您在本地和端口8080
上运行此服务器):
http://localhost:8080/abcdefg
在这种情况下, req.params.characters
将是'abcdefg'
在我看来,在路线定义中加一个明确的问号是一个错误。 我不完全确定问号的用途是什么。
对于后续问题,看起来要做的是在characters
variables(我假设是外部定义的)中寻找匹配characters[i].routeName
,并返回find的值。 如果没有find任何值,那就是当它发回false
(或试图 – 说实话,我不确定如果你尝试使用res.json(false)
会做什么res.json(false)
,因为我不知道false
是否有效JSON)。
最简单的答案:
:XXX
表示它的一个URL参数。 (即req.params.XXX
会拿起XXX是什么)
?
意味着该参数是可选的。 (即客户端用户不需要在url中包含这个参数)。
所以:
/:characters?
将允许: /
AND /yoda
打这条路线。
这是端点或资源可以包含一个variables的正常情况
让我们以facebook为例,如果你看到MarkZukerberg的时间线,那么端点或url是
https://www.facebook.com/zuck
如果你看到你自己的个人资料,那么这个zuck将被你的名字所取代。 所以这里的name参数是一个variables。
当有一个variables是url的一部分,那么我们先用冒号表示语法
如果我们想发送一些其他的值作为查询参数,然后我们使用? 标记告诉服务器,下面的string将是一个查询参数
?name=value&age=12&gender=male
和
res.json(false)
只会返回false作为响应没有别的