2016-09-27 50 views
2

後續問題:什麼是代碼「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); 
    } 
}); 
+1

[在express route api中添加命名參數]的可能副本(http://stackoverflow.com/questions/24804458/adding-named-parameters-in-express-route-api) –

回答

1

:characters實際上並不是查詢字符串的一部分。它將成爲網址的一部分。

將URL類似於以下(假設你是在本地和端口上運行該服務器8080)的東西:

http://localhost:8080/abcdefg

而且在這種情況下,req.params.characters'abcdefg'

把在我看來,路徑定義中的明確問號是一個錯誤。我不完全確定問號的用途。

對於後續問題,它似乎在做的是在characters變量(我假設是外部定義的)中尋找匹配characters[i].routeName,並返回找到的值。如果未找到任何值,那麼它將發回false(或試圖 - 說實話,如果您嘗試使用res.json(false),我不確定使用哪種快捷方式,因爲我不確定false是否是有效的JSON)。

0

這是一個端點或資源可以容納一個變量,這意味着

正常的情況下,讓我們的Facebook例如所以如果你看到MarkZukerberg的時間表則端點或網址

https://www.facebook.com/zuck 

如果你看到你自己的個人資料,那麼zuck將被你的名字取代。所以這裏的name參數是一個變量。

當過一個變量是URL的一部分,那麼,我們先與快遞語法冒號標誌

,如果我們想送一些其他值作爲查詢參數,然後我們使用?馬克告訴下面的字符串將是一個查詢參數服務器

?name=value&age=12&gender=male

而且

res.json(false) 

將剛剛返回false作爲響應閒來無事

2

簡單的答案:

:XXX表示其URL參數。 (即req.params.XXX將提取XXX的內容)

?表示該參數是可選的。 (即客戶端用戶不需要需要將這個參數包含在url中)。

所以:

/:characters?將允許:既//yoda打這條路線。

4

在這種情況下,問號表示可選參數「字符」。這允許可以有或沒有值的端點。然後他們對該參數進行測試,看看它是否包含在內。如果是這樣,他們將遍歷「字符」對象並將任何匹配的條目返回到用戶指定的端點。