2

私は、coffeescriptで記述されたnode.js / expressを使用し、jadeを使用してビューをレンダリングするプロジェクトを継承しました。ビューフォルダには、ルートを設定する必要のある約20個のjadeファイルがあります。そのように何度も繰り返すのではなく(現在は問題なく機能しています):

app.get '/html/404.html', (req,res) ->
  res.render '404',

app.get '/html/503.html', (req,res) ->
  res.render '503', 

app.get '/html/foo.html', (req,res) ->
  res.render 'foo', 

URLの配列を作成し、forループを使用してそれを反復処理することにより、これをあまり面倒にしないようにしたいと思います。次のようになります。

urls = [
  "404"
  "503"
  "foo"
]

for url in urls
  app.get "/html/#{url}.html", (req,res) ->
    res.render "#{url}",

残念ながら、これは機能していません。何かアドバイス?

4

2 に答える 2

3

これは、JavaScriptでループ内のクロージャを定義するときに発生する典型的な問題ですurl。ルート関数の値は、その関数を定義したときの値であると期待していますが、実際には、ループの最後の値です。だった。url結局のところ、変数は1つだけです。

修正は、その変数を外部クロージャに「キャプチャ」することです。これが、CoffeeScriptのdo構文が次の理由です。

for url in urls
  do (url) ->
    app.get "/html/#{url}.html", (req,res) ->
      res.render "#{url}"

これについての詳細は、私のPragPubの記事ACoffeeScriptInterventionを参照してください

(そうは言っても、ルートでExpressパラメータを使用するというArnaudの提案は、はるかに洗練されたソリューションです。ループを完全に回避できる場合は、そうしてください!)

于 2012-06-15T14:57:08.557 に答える
1

迅速な対応 :

for url in urls
  app.get "/html/#{url}.html", (req,res) ->
    res.render req.params.url
于 2012-06-15T14:08:29.650 に答える