我正在尝试将下面查询中的行集存储到变量中,以便我可以将其播放到视图中并循环遍历它。
我从DB获取结果,并且可以在 db.each 块中控制它们。我想我可以在下面生成我的JSON对象然后存储它 - 但它不是由于某种原因设置它, var data =“”只返回一个空字符串。
我有点困惑为什么 - 有谁知道我哪里出错了吗?
感谢您抽出宝贵时间阅读。
var express = require('express');
var router = express.Router();
var db = require('../lib/db.js');
/* GET contacts listing. */
router.get('/', function(req, res) {
var data = "";
db.serialize(function() {
var rowset = db.each("SELECT b.forename, b.surname FROM contacts a, contact_attributes b WHERE a.contact_id = b.contact_id", function(err, row) {
data = ' { "'+row.contact_id+'" : [ { "forename" : "'+row.forename+'", "surname" : "'+row.surname+'" } ] } ';
});
});
res.render('contacts', {
title: "Contacts",
active: "contacts",
contacts: JSON.stringify(data)
});
});
module.exports = router;
答案 0 :(得分:1)
数据库查询以异步方式运行,一旦查询返回就执行回调函数。因此,在res.render
设置为空字符串之后,但在将其设置为结果集之前调用data
。
此外,您不需要JSON.stringify
已经构建为JSON的字符串。
代码执行如下:
var data = "";
db.serialize
var rowset = db.each
res.render
db.each
回调函数,根据结果集设置data
。试试这个:
db.serialize(function() {
var rowset = db.each("SELECT forename, surname FROM contacts a, contact_attributes b WHERE a.contact_id = b.contact_id", function(err, row) {
var data = ' { "'+row.contact_id+'" : [ { "forename" : "'+row.forename+'", "surname" : "'+row.surname+'" } ] } ';
res.render('contacts', {
title: "Contacts",
active: "contacts",
contacts: data
});
});
});
});
或者,避免手动JSON字符串化:
db.serialize(function() {
var rowset = db.each("SELECT forename, surname FROM contacts a, contact_attributes b WHERE a.contact_id = b.contact_id", function(err, row) {
var data = {};
data[row.contact_id] = [
{
forename: row.forname,
surname: row.surname
}
];
res.render('contacts', {
title: "Contacts",
active: "contacts",
contacts: data
});
});
});
});