有很多方法可以使用像supertest
和nock
這樣的東西來模擬請求,但是我要做的就是能夠創建假請求對象,就好像請求是去一個不同的URL,可以傳遞給其他處理函數。創建快速請求對象,就好像它來自另一個URL
app.get("/render", function(req, res) {
// how do I do this?
var fake = createFakeRequest("/bar/?baz=qux", req);
// I want doStuff to believe the request came to /bar/?baz=qux
doStuff(fake, function(err, result) {
res.send(result);
});
});
我知道我可以修改他的所有變量,如req.path
,req.query
,req.url
,但我很擔心,我可能會錯過一些東西,好像有人在那裏一定已經解決了這個問題。
我需要這種行爲的原因是,對於我的CMS中的任何給定URL,可以有多個草稿。每個草稿將具有不同的內容元素,但這些單獨的內容元素可能具有基於URL或查詢參數的邏輯。因此,即使請求是作爲/ render /?draft = 1 & url =/foo/bar /,我希望內容元素處理器相信請求進入了/ foo/bar /並且不理會版本系統實際上處理了最初的HTTP請求。
如果我只改變'req.url',那麼'req.query.foo'將不會被正確更新,除非我有魔法在req.url中不知道這會導致其他屬性在修改時被設置。此外,我並不尋求嚴格的重寫,因爲我仍然希望/渲染處理程序接收請求並返回響應。我只是想讓任何函數/提供的調用忘記對請求對象進行更改。 – Nucleon
好的,我編輯過,但你添加了你的評論。我很抱歉,但我不知道你想達到什麼目的 – farvilain