javascript - 从 sqlite 查询 Node.js 中检索数据

标签 javascript node.js sqlite

我目前正在尝试从 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/

相关文章:

node.js - 如何使用KoaJS读取正在上传的文件?

javascript - javascript中for循环内的异步函数调用

node.js - 如何获取操作系统平台用户数据文件夹

android - 如何从android应用程序在sqlite中插入当前日期

javascript - 如何获取 JSON-P 数据的元素

javascript - 有没有办法在Javascript中根据 'Value'获取关联值

javascript - 使用javascript添加到当前日期并有几个月的滚动

javascript - 如何模拟 React Component 的功能并挂载组件?

java - 具有相同 PK 的 2 个插入为何会成功?如何更新重复的 key ?

SQLite:无法以编程方式打开网络文件,即使之前工作过