使用Node.js构建具有多个查询的JSON
Building JSON with Node.js with multiple queries
我刚刚开始使用node.js进行编码,我知道node.js是异步的,但不知道如何处理这个问题。
我正在查询mysql并构建一个JSON,如下所示,
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
port : '3306',
database : 'tango_prod'
});
connection.connect();
var postsJSON = { };
var arr = new Array();
connection.query('SELECT * FROM posts LIMIT 100', function(err, rows) {
for(i=0; i < rows.length; i++){
var post_obj = {};
var post = rows[i];
post_obj.id = post.id
post_obj.actor = build_actor(post.author_id);
arr.push(post_obj);
}
console.log(JSON.stringify(arr));
});
function build_actor(actor_id){
connection.query('SELECT * FROM people WHERE id ='+actor_id+';', function(err, actor) {
connection.query('SELECT * FROM users WHERE id ='+actor.owner_id+';', function(err, user) {
var actor_obj = {};
actor_obj.id = user.id;
actor_obj.name = user.name;
actor_obj.email = user.email;
return actor_obj
});
});
}
connection.end();
我得到JSON输出,稍后调用build_actor
函数。我必须在构建actor对象之后才能获得JSON。
您必须使用回调异步执行:
connection.query('SELECT * FROM posts LIMIT 100', function(err, rows) {
for(i=0; i < rows.length; i++){
build_actor(post.author_id, function(actor){
var post_obj = {};
var post = rows[i];
post_obj.id = post.id
post_obj.actor = actor;
arr.push(post_obj);
if(arr.length === rows.length)
console.log(JSON.stringify(arr));
});
}
});
function build_actor(actor_id, callback){
connection.query('SELECT * FROM people WHERE id ='+actor_id+';', function(err, actor) {
connection.query('SELECT * FROM users WHERE id ='+actor.owner_id+';', function(err, user) {
var actor_obj = {};
actor_obj.id = user.id;
actor_obj.name = user.name;
actor_obj.email = user.email;
callback(actor_obj);
});
});
}
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
port : '3306',
database : 'tango_prod'
});
connection.connect();
var postsJSON = { };
var arr = new Array();
connection.query('SELECT * FROM posts LIMIT 100', function(err, rows) {
for(i=0; i < rows.length; i++){
var post_obj = {};
var post = rows[i];
post_obj.id = post.id
build_actor(post.author_id,function(err,res){
if(!err){
post_obj.actor=res;
arr.push(post_obj);
console.log(JSON.stringify(arr));
}
});
}
});
function build_actor(actor_id,cb){
connection.query('SELECT * FROM people WHERE id ='+actor_id+';', function(err, actor) {
connection.query('SELECT * FROM users WHERE id ='+actor.owner_id+';', function(err, user) {
var actor_obj = {};
actor_obj.id = user.id;
actor_obj.name = user.name;
actor_obj.email = user.email;
connection.end();
cb (null,actor_obj);
});
});
}
相关文章:
- JSON:查询联接表不工作(Cordova Mobile)
- 我想将查询字符串变量添加到JSON名称/值对中
- 高效灵活的Javascript库,用于查询允许聚合的大型JSON文件
- 查询巨大的Json数据
- 如何查询json文件
- 将SQL查询+JSON文件生成移动到服务中?wcf?mvc
- 查询JSON文件以获取数组中的位置
- 查询 JSON 对象
- 在JavaScript中查询JSON
- 使用MongoDB查询JSON中的嵌套文档
- 使用另一个节点查询JSON节点值's值
- 使用jquery变量查询json对象
- 使用getJSON查询json显示“undefined"而不是数据
- Youtube API -为视频id查询JSON会加载空的嵌入式iframe
- 在Node.js+MongoDB中使用rest api插入并查询JSON数据
- 如何查询JSON值并将其包含在javascript中的rails帮助程序中
- 异步查询 JSON 对象
- 如何使用 linq.js 查询 Json 对象
- 在 JSON 对象值中查询 JSON 数组
- 使用 JSON 选择查询 JSON 对象