在服务器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'

在我看来,在路线定义中加一个明确的问号是一个错误。 我不完全确定问号的用途是什么。

对于后续问题,看起来要做的是在charactersvariables(我假设是外部定义的)中寻找匹配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作为响应没有别的