繁体   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