Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript expressjs:获取请求的url_Javascript_Node.js_Express - Fatal编程技术网

Javascript expressjs:获取请求的url

Javascript expressjs:获取请求的url,javascript,node.js,express,Javascript,Node.js,Express,我想从请求中获取客户端请求的url 目前我使用: var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url; 这一点都不好。它还省略了我需要的url片段(#/something) 有什么方法可以得到完整的url吗?也许是头球出界 这是你要找的吗 req._parsedUrl.pathname 如果尚未使用,则应: var util = require('util'); // core module conso

我想从请求中获取客户端请求的url

目前我使用:

var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这一点都不好。它还省略了我需要的url片段(#/something)

有什么方法可以得到完整的url吗?也许是头球出界


这是你要找的吗

req._parsedUrl.pathname
如果尚未使用,则应:

var util = require('util'); // core module
console.log(util.inspect(req));

要找出这种数据。

恐怕您所能做的就只有这些了。 除非您使用https,否则您可以假定该协议为http。 正如Raoul所说,在服务器端之后,您无法获取任何内容,这是针对浏览器的

   var requestedUrl =  'http://' + req.headers.host + ':3000'  + req.url

您无法在服务器上获取url的片段(哈希部分),它不会被浏览器传输

片段标识符的功能不同于URI的其余部分:即,其处理完全是客户端的,没有服务器的参与——当然,服务器通常帮助确定MIME类型,MIME类型确定片段的处理。当代理(如Web浏览器)从Web服务器请求资源时,代理将URI发送到服务器,但不发送片段。相反,代理等待服务器发送资源,然后代理根据文档类型和片段值处理资源

如果您想要获得完整的URL(没有fragement标识符),最好的方法是使用“主机”头,其中包括端口而不是req.Host,但其他方面与您当前所做的相同:

var requestedUrl = req.protocol + '://' + req.get('Host') + req.url;

我经常在我的express应用程序中添加类似的内容:

  app.use(function(req, res, next) {
    req.getRoot = function() {
      return req.protocol + "://" + req.get('host');
    }
    return next();
  });

现在您有了一个函数,如果需要,您可以按需调用它。

hmm第一个函数只提供url本身。我用youre-hint和util来解析manuelly“req”。我没有找到我要找的东西。我想要整个ressource(协议+主机名+url+hashbang)您想要实现什么?通常我使用客户端路由框架,比如主干网或sammy,它透明地使用历史API或片段标识符,具体取决于支持情况。然后,您可以在服务器上进行内容协商,以确定请求是否由ajax发出(并提供适当的内容)。我在子域上获得了身份验证路由,并希望将请求的url存储到会话中,以便从登录域重定向回。在前端中,我使用了主干,所以req.protocoll+'://'+req.host+req.url是实现整个url的最短方法?是的,这将起作用,您也可以从标题中获取主机。事实上,从docs:req.host从“host”标题字段(无效的portno)返回主机名。因此,如果您想说明端口,最好使用主机标头。那么我应该使用req.get('host')还是req.host?如果您在不同环境中的不同端口上运行服务器,那么使用req.get('host')将包含端口号,您不必编写逻辑来检查环境并相应地调整端口。使用“主持人“header将确保保留任何端口号,您无需在2个位置维护该端口号。他还提到,这是为了登录,所以希望这意味着这是一个https连接。无论哪种方式,req.protocol都提供了URL方案。我想知道为什么您需要一个按需函数,为什么不将其存储在变量中并按需使用该变量。