我有一个查询,该查询返回节点控制器中结果集的数组。现在,我要遍历结果,并且需要为每个结果集调用一个不同的函数。如何在Node中实现这一目标。
我是节点上的一只新蜜蜂,找不到解决方法。
下面是我的路由器文件:
/*jslint node:true*/
var express = require('express');
var session = require('express-session');
var router = express.Router();
var bodyParser = require('body-parser');
const mgrDataCtrl = require('../controllers/mgrDataCtrl');
router.use(session());
// Use body parser to parse JSON body
router.use(bodyParser.json());
// Http Method: GET
router.route('/mgrData/').get(mgrDataCtrl.getMgrData);
module.exports = router;
下面是我的控制器:
/*jslint node:true*/
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
const database = require('../services/database.js');
// Import events module
var events = require('events');
// Use body parser to parse JSON body
router.use(bodyParser.json());
//Function to get Manager data from youCoach DB
async function getMgrData(req,res,next){
try{
/*Get total items*/
const presult = await database.simpleExecute(`SELECT a.username, a.id, a.email, a.dept_id, b.deptno, b.dept_name from emp a LEFT JOIN dept b ON a.dept_id = b.id`);
const prows = presult.rows;
console.log("Rows ="+prows);
res.json(prows);
**// Here I want to write a for loop for above result and call a different function for each row.**
} catch (err) {
console.log("Error ===="+err);
next(err);
}
};
module.exports.getMgrData = getMgrData;
先谢谢了。
答案 0 :(得分:2)
您可以使用 async js 进行循环并管理代码的执行。对于数据结果循环,您可以使用async.js中的async.eachOf
非常容易实现。在一个循环中,您可以根据结果编写业务逻辑。
这是文档链接:https://caolan.github.io/async/docs.html#eachOf
检查以下async.eachOf
的代码实现,希望对您有所帮助。
/*jslint node:true*/
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
const database = require('../services/database.js');
// Import events module
var events = require('events');
var async = require("async");
// Use body parser to parse JSON body
router.use(bodyParser.json());
//Function to get Manager data from youCoach DB
async function getMgrData(req,res,next){
try{
/*Get total items*/
const presult = await database.simpleExecute(`SELECT a.username, a.id, a.email, a.dept_id, b.deptno, b.dept_name from emp a LEFT JOIN dept b ON a.dept_id = b.id`);
const prows = presult.rows;
let finalResult = [];
async.eachOf(prows, function(prow, key, eachCallBack) {
finalResult[key] = // output;
eachCallBack();
}, function(err, result){
if(err) {
console.log("Error ===="+err);
next(err);
} else {
res.json(finalResult);
}
})
} catch (err) {
console.log("Error ===="+err);
next(err);
}
};
module.exports.getMgrData = getMgrData;