簡體   English   中英

創建快速請求對象,就好像它來自另一個URL

[英]Creating express request object as if it came from another URL

有很多方法可以使用諸如supertestnock類的方法來模擬請求,但是我要做的是能夠創建偽造的請求對象,就像請求將轉到另一個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.pathreq.queryreq.url但是我擔心我可能會錯過一些東西,而且似乎有人一定已經解決了這個問題。

我需要此行為的原因是,對於CMS中的任何給定URL,可以有多個草稿。 每個草稿將具有不同的內容元素,但是這些單獨的內容元素可能具有基於URL或查詢參數的邏輯。 因此,即使請求以/ render /?draft = 1&url = / foo / bar /的身份進入,我仍希望內容元素處理器相信該請求已進入/ foo / bar /並忽略實際處理的版本系統初始HTTP請求。

不確定理解,但似乎是URL重寫,因此使用中間件可能有效

function urlRewrite(req, res, next){
    req.url ="...";
    next();
}

所以

app.use(urlRewrite);

確保在正確的位置使用它(取決於您的服務器目標),因為在重寫之前我們可能需要參數...如果重寫,則在之后可能需要它...

編輯在我的框架中:

server.before(extractPath);
server.before(urlParams);
server.before(pathParams);
server.get("/foo", route.foo);

所以我可以寫

server.before(extractPath);
=> server.before( function(req, res, next){
    urlRewrite(req, res, function(){
        extractPath(req, res, next);
    }
});
server.before(urlParams);
server.before(pathParams);
server.get("/foo", route.foo);

如果urlRewrite取決於urlParams,我可以寫

server.before(extractPath);
server.before(urlParams);
=> server.before( function(req, res, next){
    urlRewrite(req, res, function(){
        extractPath(req, res, function(){
            urlParams(req, res, next);
        });
    });
});
server.before(pathParams);
server.get("/foo", route.foo);

如我所說,這取決於您的框架

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM