2016-08-24 36 views
0

我正在做一個博客應用程序,我正在努力尋找一種方式來重定向/發送一個特定的狀態,然後採取相應的行動。如何將expressjs重定向到特定狀態?

例如,我有一個函數,使用貓鼬在mongodb中保存數據。然後如果沒有錯誤發生200狀態。

newArticle.save(function(err){ 
    if (err) throw err; 
    else { 
    res.sendStatus(200); 
    } 
}); 

我希望能夠「讀取」此狀態(我用我的看法和路線和SuperAgent的我的Ajax請求的反應),然後做一些事情,例如,如果我的文章是成功的添加,然後加載頁面上的某個組件,該組件將具有h1的說法:發佈文章的工作非常出色。

所以這是第一部分。

第二部分是,對於我想表達的所有404或500錯誤,例如:myblog.com - > myblog.com/something,然後用我的反應路由器簡單地呈現一些基本的404頁,我做不知道該怎麼做,我正在尋找很多,找不到東西...

而且,由於我缺乏關於服務器和客戶端如何彼此對話的HTTP基礎知識的知識,如果您有任何好的文章/書推薦我想知道。

回答

1

第一部分。根據您是否使用狀態或數據庫(如flux或redux),如果沒有,您可以讓ajax響應從您的服務器獲得HTTP狀態。使用它,你可以使用setState來設置一個叫做isArticleSaveSucessful的狀態屬性。然後,只要該密鑰爲真,就簡單地呈現您的成功消息組件。

第二部分。爲了更好的用戶體驗,我認爲你的意圖是,url應該仍然是用戶想要的,即blog.com/bad-article-name,但是頁面應該呈現404。與上述非常相似,當API響應回來,相應地setState,就像articleNotFound。然後在您的渲染函數中,對該狀態執行if檢查,如果它爲真,則渲染錯誤組件。

+0

嗨Dan,非常感謝您的回答,我還有一個問題,在我的expressjs反應博客應用程序中,我正在使用react-router作爲我的路由器,並且我在考慮無法使用express js因爲react-router只管理我的路由,因此告訴我是否或者不是一個組件連接到路由器,我想知道是否有一個內置的功能拋出未知路由的默認組件,我不知道是否你明白我的意思,對不起我的英語 – MaieonBrix

+0

React-route確實能夠顯示一個默認路徑,可以用來渲染一個不是'path ='*''的頁面,但它不適用於什麼你正在描述。只有當你的路線不符合模式時才適用。對於您的場景,博客網址與您的路線匹配,但未找到特定的博客條目,這在技術上滿足了作業的反應路由器部分。服務器路由背後的邏輯與客戶端路由不同。除此之外,在你的路線上顯示一個notFound組件是更「反應」的方式。 – Dan