[英]How to Redirect User to Another URL Depending on the URL He Came From
[英]Creating express request object as if it came from another URL
有很多方法可以使用諸如supertest
和nock
類的方法來模擬請求,但是我要做的是能夠創建偽造的請求對象,就像請求將轉到另一個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請求。
不確定理解,但似乎是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.