在服务器路径中使用冒号和问号获取方法

时间:2016-09-27 18:11:51

标签: node.js express

跟进问题:什么是代码“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);
    }
});

4 个答案:

答案 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,因为没有别的响应