Node.js 收集单个路由调用的多个函数输出,并在nodejs中呈现为html
nodejs新手,尝试使用nodejs、express和mysql作为后端执行多个输出到html的函数。需要在单个路由调用上执行20个函数,以组合20个函数的输出,并将其作为json呈现到html My app.js函数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
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吗???你在快递路线上是什么意思?创建另一个帖子并在那里详细阐述。。。。