2012-05-14 16 views
3

Node.jsでの作業を開始したばかりなので、愚かなことを許してください! Node.jsを使用して新しいアプリケーションを作成しようとしています。 PostgreSQLデータベースでExpressフレームワークを使用しています。問題は私の見解では、私は関数を呼びたいと思ったということです。だから、私のヒスイファイルから呼び出されるヘルパー関数を使用しました。しかし、この関数はデータベースにアクセスするので、コールバックをinorderで使用しようとしました。Jadeテンプレートからのコールバックでヘルパー関数を呼び出す

しかし、最後の引数を関数として持つjadeテンプレートから関数を呼び出すことはできません。ヘルパー関数は、パラメータが1つしか渡されず、コールバック関数ではない場合にうまく機能しました。しかし、データベースクエリにはしばらく時間がかかっていたため、データは表示されませんでした。しかし、jadeテンプレートからコールバック関数を呼び出そうとすると、構文エラーが発生します。

私のヒスイのテンプレートで私の関数呼び出し:

exports.helpers= { 
nameAndVersion: function(entid, callback) { 
var x=1; 
    callback(null, x); 
    console.log(1); 
} 
}; 

マイエラー:

500 SyntaxError: Unexpected token) 

#{ nameAndVersion(result.bu_entrep_id, function(error, result)) } 

私のヘルパー関数(私はそれが動作するように取得しようとしていたので、それは簡単です)

基本的には、私のjadeテンプレートからヘルパー関数を呼び出し、その関数をコールバック関数にしたいに。あなたがやりたい

+0

「結果」の2番目のパラメータで返されるデータをWebページに表示したいとします。そして、私はこのような書き込みを試みたが、それは私に同じエラーをまだ与えた。私のコードは次のとおりです:function(error、result){console.log(result.rows [0]); } – learnrubyonrails

答えて

3

  1. は、データを取得します:

    1. 解析テンプレート
    2. データ

    Expressのテンプレートが行うことに期待されているとのデータ

  2. テンプレートをレンダリング取得
  3. データの解析とレンダリング

レンダリングを開始したら複合コードを実行する必要はありません(データベースが利用できない場合はどうすればよいですか)。

ジェイドヘルパーは、機能的なものではなく、形式的な目的しか持っていません。

ヘルパーを呼び出す代わりに、レンダラーを呼び出すときに必要なデータを与えています。

app.get('anyPage', function(req, res) { 
    database.doSomeDataBaseQuery(/* Data base callback */ function(data, err) { 
    if(!err) res.render('pageTemplate', {dataBaseData:data}); 
    } 
}); 
関連する問題