2012-01-22 4 views
4

私はExpress、Connect、およびJadeでNode.jsを使用しています。私はアプリケーションのルートへの絶対的なリンクを提供したいと思いますが、これを行う方法がわかりません。これは簡単な仕事のように思えるので、私は何かを見逃すはずです。Node.jsで絶対リンクを作成するには?

私はこれを行うことができます:/ myroute

をしかし、私が欲しいのはこれです:http://localhost:3000/myroute

権利、これを行い、どこかのヘルパーが存在しなければなりませんか?

答えて

3

私はこのために自分のヘルパーを作成しましたが、これは最大の解決策のように感じません。

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 

、これは私は、相対URLから絶対URLを取得するために何をすべきかです:

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

私は応答の欠如のために今は自分の答えを受け入れていますが、これは私がまとめて管理できる最高のものです。私はそれが人々を助けると思う。より良い解決策を見つけるとすぐに、私はそれに応じて質問/回答を更新します。 –

1

「ヘルパー」はありませんが、ルートのjadeローカル変数にreq.query変数を注入することで独自のコードを書くことができます。

個人的には、私はそれをクライアント側でwindow.location.originを使ってやっています。

0

アップデート:実際には、reqがGETではなくPOSTからのものであれば、これはうまくいくようです。 :(

更新2:うわ、それはブラウザ間でも一貫していないだとティムのはありませんどちらもグーグル、私が使用して終了し解決策を見つけるために「有害とみなさwindow.location.origin」


。ブラウザが「 http://example.com:1234/something」を当たったとき

req.headers.originは「http://example.com:1234」のような何かを返すように表示されます。

これは、@のtimoxleyのクライアント側のソリューションへ急行同等のようです。:)

あなたのものより少しシンプルですが、リテラル 'http'(またはhttps)の必要性がなくなります。

関連する問題