在Express中获取请求源

时间:2016-04-11 16:34:35

标签: express

我如何真正获得原产地?当我在router.get('/', ...)下使用以下内容时,它只返回undefined。

var origin = req.get('origin');

(我正在尝试使用原始域作为查找键,然后构造正确的URL参数以发布到API)

3 个答案:

答案 0 :(得分:2)

在请求路径中添加此expressJs中间件。确保它是遇到的第一个中间件请求。

/*
    Creates origin property on request object
*/
app.use(function(req, res, next){

    var protocol = req.protocol;

    var hostHeaderIndex = req.rawHeaders.indexOf('Host') + 1;
    var host = hostHeaderIndex?req.rawHeaders[hostHeaderIndex]:undefined;

    Object.defineProperty(req, 'origin', {

        get: function(){

            if( !host )
                return req.headers.referer?req.headers.referer.substring(0, req.headers.referer.length-1):undefined;
            else
                return protocol + '://' + host;
        }
    });

    next();
});

//其中app是express app或express router object。

答案 1 :(得分:0)

当服务器(在本例中为app.js)在其路由之前插入var origin = req.get('Origin')时,

router.getres.header("Access-Control-Allow-Origin", <a single allowed domain here (or '*' for any domain)>);下工作。

答案 2 :(得分:0)

有两种获取主机/来源的方法

第一种方法:

您必须从HOST header中检索它。

var host = req.get('host');

如果这是为了支持cross-origin requests,则应改用Origin标头。

var origin = req.get('origin');

第二种方法:

您还可以使用:

var host = req.headers.host;
var origin = req.headers.origin;

附加说明:

如果您要查找客户端的IP,则可以使用以下方法进行检索:

var userIP = req.socket.remoteAddress;