2015-12-23 32 views
1

我正在使用mongoosastic,它工作正常,但我面臨的問題是,我如何從.post方法中取出對象並將它傳遞給.get方法?如何在node.js中搜索?

例如:

router.post('/search', function(req, res, next) { 
    Product.search({ something: 'Something'}, function(err, result) { 
     if (err) return next(err); 
     res.redirect('/search') // <--- How do i pass the result object? 
    }); 
}); 

router.get('/search', function(req, res, next) { 
    res.render('search'); 
}); 

我嘗試另一個走近,我使用req.flash,但我真的不喜歡這種做法。

你們是怎麼解決這個問題的?這是一個非常基本的搜索,在那裏用戶搜索,然後它會將該用戶重定向到另一個頁面,在那裏它將顯示找到的結果或找不到。

+1

爲什麼你沒有一個處理它的函數? (這意味着get函數和post函數都會調用一個通用函數)爲什麼你需要將它傳遞給get函數?這是後端代碼或前端代碼,它看起來像表達? – SoluableNonagon

+0

req.search = result; ?然後在你的get('/ search')中,你可以訪問req.search。這是基本的中間件方法。想象中間件就像處理請求的過濾器序列,在路上添加,刪除和修改數據。那是你想要做的?將搜索結果添加到請求中? – Ludo

+0

你爲什麼想這樣做?你可以在'post'中提出請求。 –

回答

1

您不需要使用GET將用戶重定向到其他路由以發送響應。

您可以在.post的服務請求,這是完全可以接受的。

POSTGET是HTTP請求的兩種形式。無論什麼類型的請求到達Web服務器,響應都可能是任何事情。它可能是一個重定向,或一個實際的網頁,或其他類型的東西,如錯誤。

我不認爲你需要這個,但只是爲了完成,搜索頁面可能是一個不同的場景。 GET請求可以在瀏覽器中加入書籤,因爲重新呈現頁面所需要的只是URL。但POST請求不可能,因爲它需要post參數以及請求的正文。如果您希望讓用戶將結果加入書籤頁面或與結果具有永久鏈接到同一頁面,則可以在GET請求中提供請求(以及)。在URL中添加一個額外的參數,例如?q=search-term ...

這是一種通過GET請求發送參數。一個/search路由也將捕獲一個/search?q=search-term的URL。您可以使用req.query.q訪問該版本,其值將爲"search-term"(有關更多信息,請參見this question)。因此,您可以修改表單以發送GET請求而不是POST(<form action="get">...),或者您可以使用GET將用戶重定向回搜索頁面,並沿着URL傳遞參數。最後在GET請求中提供所有搜索結果。

但是,再次,這是更先進的東西,對於你需要做的事情來說,一般來說,無論是POST還是GET還是其他任何東西都可以提供請求。

+0

嘿,埃米爾,謝謝你詳細解釋,但它是好的,如果你展示一些例子,因爲目前我很困惑。我創建了一個github gist https://gist.github.com/anonymous/69802ee3d24ff19f3ee0 –

+0

@JackMoscovi代碼實際上取決於您的整個項目,所以不要期望這些代碼有效,它只是給你一個想法。 [這裏](https://gist.github.com/amir-s/70fe3de0092a560468b4)。 如果這回答你的問題,考慮增加投票,並將其標記爲未來訪問者的答案:) –

+0

令人驚歎的答案,謝謝你的工作! –