2017-01-05 3 views
1

nodejsを初心者で、nodejs、express、mysqlをバックエンドとして使用して複数の関数出力を実行しようとしています。 20個の関数を出力し、jsonをhtmlにレンダリングします。単一ルート呼び出しで複数の関数出力を集め、nodejsのhtmlにレンダリング

マイapp.jsが

var express = require('express'); 
     var router = express.Router(); 
     var path  = require('path'); 
     var app = express(); 
     var todo = require('./modules/first'); 
     var todo1 = require('./modules/second'); 
     var connection = require('./connection'); 
     connection.init(); 
     app.get('/', function(req,res,next) {   
    Promise.all([todo.class1.getUsrCnt(),todo.class1.getTotlAmt(),todo.class1.getTotlOrdrCnt(),todo.class1.getTotlCntRcds(),todo.class1.getTotlScsRcds(),todo.class1.getTotlFailRcds(),todo.class1.getTotlAmtRcds()]) 
        .then(function(allData) { 
       res.addHeader("Access-Control-Allow-Origin", "http://hostname:8183/"); 
     res.json({ message3: allData }); 
     }); 
     res.send(send response to html); 
    }) 
app.get('/second', function(req,res,next) {   
    Promise.all([todo1.class2.getUsr........]) 
        .then(function(allData) { 
       res.addHeader("Access-Control-Allow-Origin", "http://hostname:8183/"); 
     res.json({ message3: allData }); 
     }); 
     res.send(send response to html); 
    }) 
    var server = app.listen(8183, function(){ 
     console.log('Server listening on port '+ server.address().port) 
    }); 

マイtodo.js機能を約束して、すべてのHTMLファイルにレンダリングすることができませんでし未定義はじめ

var connection = require('../connection'); 
    var data = {},obj={}; 
    var d = new Date(); 
    var month = d.getMonth() + 1; 
    var year = d.getFullYear(); 

    obj.getUsrCnt = function getUsrCnt(callback) { 
      connection.acquire(function(err, con) { 
       con.query(query1, function(err, result) { 
        con.release(); 
        data.usrs_cnt = result[0].some; 
       }) 
      }); 
     } 
    obj.getTotlAmt = function getTotlAmt(callback) { 
      connection.acquire(function(err, con) { 
       con.query(query2, function(err, result) { 
        con.release(); 
        data.total_amt = result[0].some1; 
       }) 
      }); 
     } 

    obj.getTotlOrdrCnt = function getTotlOrdrCnt(callback) { 
      connection.acquire(function(err, con) { 
       con.query(query3, function(err, result) { 
        con.release(); 
        data.total_orders = result[0].some2; 
       }) 
      }); 
     } 
     . 
     . 
     . functions go on 
exports.class1 = obj; 

です。

答えて

1

あなたが書いたコードについてはわかりませんが、すべての関数を呼び出してすべての結果を取得してユーザーに返すことを理解していますか?

あなたが例えば、いくつかの呼び出しを待って多くのライブラリ、約束基づき使用することができますので:あなたの更新されたコード用として

Promise.all([todo.getUsrCnt('dontcare'), todo.getTotlAmt('dontcate')]) 
    .then(function(allData) { 
     // All data available here in the order it was called. 
    }); 

を、あなたはローカル変数に代入、約束としてデータを返すされていません。

これはあなたの方法がどのように見えるべきかです:

あなたがここに見ることができるように、私は新しい約束を作成し、メイン機能でそれを返しています
obj.getUsrCnt = function getUsrCnt(callback) { 
     var promise = new Promise(function(resolve, reject) { 
      connection.acquire(function(err, con) { 
        if(err) { 
         return reject(err); 
        } 
        con.query(query1, function(err, result) { 
         con.release(); 
         resolve(result[0].some); 
        }) 
       }); 
     }); 
     return promise; 

    } 

。 新しい約束の中に私は2つの方法があります: "解決"、 "拒否" 1つはデータ用、もう1つはエラー用です。

あなたはこのような約束を使用するときにそう:

returnedPromise.then(function(data) { 
    //this data is what we got from resolve 
}).catch(function(err) { 
    //this err is what we got from reject 
}); 

をあなたは は、すべてのメソッドにこれを行う、約束はまたは解消または拒否できることを確認することができますし、あなたがデータ

+0

を見始めるのおかげあなたが何をしたのですか? – yaswanth

+0

あなたは何をしましたか?コードを表示してください...あなたが持っている出力は.... –

+0

コードを修正してください。アプリケーションのjs [{}、{}、{}、{}、{}]のような出力を得るには – yaswanth

関連する問題