【发布时间】:2017-01-02 12:26:53
【问题描述】:
我正在使用带有 JavaScript 的 Electron 并尝试访问 SQLite 数据库。 db 的输出是国家列表。目标是 div 中的简单 ul。该操作由附加到页面上的按钮的 onclick 事件调用。
这就是问题所在。从技术上讲,我可以访问数据库。但是,在数据层(data.js)中,我有两个选项只能从 db 文件中填充数组。在每个中找到的 console.log() 仅用于调试。
在选项 1 中,返回元素返回长度为 23 的完全填充的数组(请参见下面的选项 1 图像),而将返回元素移出 db.all 函数会返回顶部为空的数组,但在扩展时填充长度为 0(参见选项 2 图像)。我认为第一个选项是数组的外观,但是由于数组包含在 db.all 函数中,因此它不会为 data.js 中的 getLocations() 返回任何内容。随后,model.js 和 view.js(下面的代码)中的数组仍未定义。
如果我选择选项 2,则数组会向下填充(即数据、模型和视图),但所有数组的长度仍为 0,因为它们“顶部为空”。因此,遍历数组以写入 div 失败,因为长度最终不正确为 0。
附带说明,如果我将国家/地区硬编码到 data.js 中的数组中,则一切正常,并且国家/地区列表写入页面。虽然我可以(并且需要)从 db 文件中获取数据,但它似乎会导致上述问题。所以,这真的是关于 data.js 如何返回数组。
是否有人对如何正确填充数组有任何建议,以便我可以遍历它们并写入页面?
感谢您的帮助!
Data.js 选项 1:
function getLocations() {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray = [];
db.all('SELECT * FROM Country', function(err, rows) {
rows.forEach(function(row) {
larray.push(row.CountryName);
})
console.log(larray);
return larray;
});
}
Data.js 选项 2:
function getLocations() {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray = [];
db.all('SELECT * FROM Country', function(err, rows) {
rows.forEach(function(row) {
larray.push(row.CountryName);
})
});
console.log(larray);
return larray;
}
model.js:
function Locations() {
//Pull location values from data
var viewLoc = getLocations();
return viewLoc;
}
view.js:
function viewLocation() {
var viewLoc = Locations();
var container = document.getElementById('wrapper');
for (var i=0; i < viewLoc.length; i++) {
container.insertAdjacentHTML('beforeend', '<li>' + viewLoc[i]);
}
};
【问题讨论】:
标签: javascript arrays function sqlite electron