2017-11-23 9 views
0

今度は2日間サークルを回りました。 私は(接続パラメータがsqlconfigである)私はノードエクスプレスとmssqlデータベースクエリ結果をビューテンプレートに戻すにはどうすればいいですか

getCategories((rs) => console.log('Get-Categories', rs)); 

を行うとき、私は期待どおりの結果を得るため

function getCategories(callback) { 
    var conn = new mssql.ConnectionPool(sqlconfig); 
    var req = new mssql.Request(conn); 
    console.log('in getCategories'); 
    conn.connect((err) => { 
     if (err) { 
      console.log('Connection Error:', err); 
     } 
     req.query("Select top 3 * from Categories", (err, rs) => { 
      if (err) { 
       console.log('Select error: ', err); 
      } else { 
       callback(rs.recordsets[0]); 
      } 
      conn.close(); 
     }); 
    }) 
} 

は、私は、データが正しく返されている知っているAzureのSQLデータベースからいくつかのデータを取得しています

私はデータセットをビューに通すのに苦労しています

app.get('/categories', (req, res) => { 
    res.render('categories.hbs', { 
     pageTitle: 'Catgories', 
     currentYear: new Date().getFullYear(), 
     categories: getCategories((rs) => rs) 
    }); 
}); 

はカテゴリに何も返さないため、コードが呼び出されたときにコールバックが終了していません。

getCategoriesが完了するまでapp.getを待機させ、データがビューに返される準備が整うようにするにはどうすればよいですか。

答えて

0

私は私はこれが Need to keep promise result in a variable for Nodejs mssql validation

を動作し、そこに自分の答えを入れているかを理解するために聞かせて、この記事を見つけました。短いバージョンでは、ノードでは、変数値を関数に戻すのではなく、変数に代入するのではなく、変数の値をINSIDEに設定する必要があります。データはバックビューに合格する準備ができているように、getCategoriesが完了するまで、私はapp.get待機を作るにはどうすればよい

fetchDataFromDB('Select top 10 * from X', (err, res)=>{myvar = res}) 
0

「getCategories」関数を、ビューで取得できるリクエストオブジェクトに配置するミドルウェアにすることができます。操作が完了したら、next()を呼び出してビューをレンダリングするだけです。

app.get('/categories', getCategories, (req, res) => { 
    res.render('categories.hbs', { 
     pageTitle: 'Catgories', 
     currentYear: new Date().getFullYear(), 
     categories: req.categories 
    }); 
}); 
関連する問題