I am trying to structure a json response with nodejs restapi but my response is always sent earlier even though the function has not been executed.
i tried await with promise nothing works and send error..
//this is my desired structure for json
[
{
"user_id": "2",
"user_name": "Mehedi Hasan",
"permissions": [
{
"table_name": "questionbank",
"permission_create": "true",
"permission_update": "true",
"permission_delete": "true"
},
{
"table_name": "questionbankquestions",
"permission_create": "true",
"permission_update": "true",
"permission_delete": "true"
},
{
"table_name": "subjects",
"permission_create": "false",
"permission_update": "true",
"permission_delete": "false"
},
{
"table_name": "subjectquestions",
"permission_create": "true",
"permission_update": "true",
"permission_delete": "true"
},
{
"table_name": "modeltests",
"permission_create": "true",
"permission_update": "true",
"permission_delete": "true"
},
{
"table_name": "modeltestquestions",
"permission_create": "true",
"permission_update": "true",
"permission_delete": "true"
}
]
},
............................
]
//this is what i tried
function getAllUser(done) {
var sql = "SELECT users.id, users.username FROM users";
db.query(sql, [], function(err, rows, fields) {
if (err) throw err;
done(rows);
});
}
/*--------------------------Check user permission --------------------------*/
router.get("/adminpermissions", function(req, res) {
var sql =
"SELECT table_name, permission_create, permission_update, permission_delete FROM permissions " +
"WHERE user_id = ?";
finalArray = [];
jsonFormat = [];
permissionArray = [];
getAllUser(function(user) {
for (var i = 0; i < user.length; i++) {
userId = user[i].id;
userName = user[i].username;
db.query(sql, [userId], function(err, rows, fields) {
if (err) {
res.status(500).send({ error: "Something failed!" });
}
console.log(rows);
permissionArray[i] = rows;
var data = {
user_id: userId,
user_name: userName,
permission: permissionArray[i]
};
jsonFormat.push(data);
});
}
res.json(jsonFormat);
});
});
i am always getting [] array as response.. though i know the problem that the response is being send even though the loop has not been finished but dont know how to solve.. tried await with promise but end up with so many error messages..