Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 收集单个路由调用的多个函数输出,并在nodejs中呈现为html_Node.js_Express - Fatal编程技术网

Node.js 收集单个路由调用的多个函数输出,并在nodejs中呈现为html

Node.js 收集单个路由调用的多个函数输出,并在nodejs中呈现为html,node.js,express,Node.js,Express,nodejs新手,尝试使用nodejs、express和mysql作为后端执行多个输出到html的函数。需要在单个路由调用上执行20个函数,以组合20个函数的输出,并将其作为json呈现到html My app.js函数 var express = require('express'); var router = express.Router(); var path = require('path'); var app = e

nodejs新手,尝试使用nodejs、express和mysql作为后端执行多个输出到html的函数。需要在单个路由调用上执行20个函数,以组合20个函数的输出,并将其作为json呈现到html

My 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是

    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;

在promise all中未定义,无法呈现到html文件。

不确定您编写的代码,但据我所知,您希望调用所有函数,获取所有结果并返回给用户

因此,您可以使用许多等待多个调用的库,例如,基于承诺的:

 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;

    }
正如您在这里看到的,我正在创建一个新的承诺,并在main函数中返回它。 在新承诺中,我有两种方法:“解决”、“拒绝” 一个用于数据,一个用于错误

所以当你像这样使用承诺时:

returnedPromise.then(function(data) {
    //this data is what we got from resolve
}).catch(function(err) {
    //this err is what we got from reject
}); 
你可以看到,一个承诺可以被拒绝、解决或拒绝,
对所有方法执行此操作,然后您开始看到数据

感谢您的响应。但使用时无法获得输出。所有修改代码,请检查。获取app js[{},{},{},{},{},{}]@yaswanth等输出请查看更新后的帖子,并查看如何使用promisesThanks获得帮助,并且效果良好。你能告诉我如何在快递路线中使用promise all吗???你在快递路线上是什么意思?创建另一个帖子并在那里详细阐述。。。。