我目前正在尝试从 node.js 中的 sqlite 查询中检索数据,sql 函数位于不同的文件中,因此我将其导出为模块,然后从 index.js 中调用该函数。但是当我尝试检索数据时,该函数返回一个空值。
这是我的代码
索引.js
var express = require("express");
var body_parser = require("body-parser");
var app = express();
var db = require('./dbhandler.js');
app.set("view engine", "jade");
app.get("/data",function(req,res){
let data = db.select();
res.send(data);
});
app.get("/",function(req,res){
res.render("index");
});
app.listen(8888);
数据库处理器
var sqlite3 = require("sqlite3");
const file = "hr";
exports.select = function (){
var lista = [];
var db = new sqlite3.Database(file);
db.all("SELECT * FROM usuarios", function(err,rows){
let contador = 0;
rows.forEach(function (row) {
lista[contador] = row.nombre + ";" + row.cedula + ";" + row.edad + ";" + row.pais;
});
});
db.close();
return lista;
}
最佳答案
Node 是异步的!!! lista 在 db.all 函数完成之前从模块返回。
您需要将回调传递给选择函数或返回 promise 。回调方法看起来像这样:
exports.select = function (cb){
var lista = [];
var db = new sqlite3.Database(file);
db.all("SELECT * FROM usuarios", function(err,rows){
if(err) return cb(err);
let contador = 0;
rows.forEach(function (row) {
lista[contador] = row.nombre + ";" + row.cedula + ";" + row.edad + ";"
+ row.pais; });
db.close();
return cb(null, lists);
});
}
关于javascript - 从 sqlite 查询 Node.js 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37776205/