如何在Node.js中创build绝对链接?

我使用Express,Connect和Jade来使用Node.js。 我想在我的应用程序中提供一个绝对的路线链接,但我找不到如何做到这一点。 我必须错过一些东西,因为这看起来很简单。

我可以这样做:/ myroute

但是我想要的是: http:// localhost:3000 / myroute

在某个地方一定有帮手,对吗?

我为此创造了自己的帮手,这并不是最好的解决scheme。

Helpers = { toAbsolute: ( url, req ) -> 'http://' + req.headers.host + url } DynamicHelpers = { req: ( req, res ) -> req } exports.Helpers = Helpers exports.DynamicHelpers = DynamicHelpers 

我在我的app.coffee文件中添加助手:

 helpers = require './helpers.js' # Helpers app.helpers helpers.Helpers app.dynamicHelpers helpers.DynamicHelpers 

在我的[jade]视图中,这是我从相对URL获取绝对URL的方法:

 | <a href="#{ toAbsolute( '/relativeUrl', req ) }">link text</a> 

没有“帮手”,但是你可以通过将req.queryvariables注入到路由的局部variables中来编写自己的代码。

就个人而言,我会使用window.location.origin来做客户端。

更新 :实际上,这似乎只工作如果req是从一个POST,而不是一个GET。 🙁

更新2 :呃,在浏览器中甚至不一致。 蒂姆也不是。 要find我最终使用的解决scheme,谷歌“window.location.origin被认为是有害的”。


当浏览器点击“ http://example.com:1234/something ”时,req.headers.origin似乎会返回类似于“ http://example.com:1234 ”的内容。

这似乎是相当于@ timoxley的客户端解决scheme。 🙂

这只是比你简单一点,但是它不需要字面的'http'(或https)。