【问题标题】:How do I return a value from a row by querying a sqlite3 database? [duplicate]如何通过查询 sqlite3 数据库从行中返回值? [复制]
【发布时间】:2021-08-17 06:44:51
【问题描述】:

我正在为一些基于 sqlite3 的 expressjs 应用程序编写一些数据库中间件。 这是我的目录结构:

     | app
       | database
          index.js
       | routes
          index.js

database/index.js 包含:

module.exports.getLinkById = function(id) {
    Database.get(`SELECT redir FROM root WHERE id = "${id}"`, [], function(err, rows) {
        try {
            var row = rows;
            console.log(row.redir); // successfully logs the redir attr with correct value
            return row;
        } catch (e) {
            throw e;
        }
    });
};

并且 routes/index.js 包含:

var database = require('../database');
console.log(database.getLinkById("afb8")); // undefined

在database/index.js文件中,根据id选择行并返回。为了调试,我console.log()ged 并记录了正确的值。 但是,即使我返回了 row 值,routes/index.js 仍将其视为未定义。 如何正确地return 值,以便我可以在routes/index.js 中访问它?

【问题讨论】:

    标签: javascript node-sqlite3


    【解决方案1】:

    这是一个不返回任何内容的异步函数。

    只需返回一个快递的响应:

    app.get("/api/user/:id", (req, res, next) => {
        var sql = "select * from user where id = ?"
        var params = [req.params.id]
        db.get(sql, params, (err, row) => {
            if (err) {
              res.status(400).json({"error":err.message});
              return;
            }
            res.json({
                "message":"success",
                "data":row
            })
          });
    });
    

    如果您需要同时运行更多代码,请参阅: sqlite3 nodejs get value from table

    中间件所需功能,添加到database.js:

    // Hack to look like node-postgres
    // (and handle async / await operation)
    db.query = function (sql, params) {
      var that = this;
      return new Promise(function (resolve, reject) {
        that.all(sql, params, function (error, rows) {
          if (error)
            reject(error);
          else
            resolve({ rows: rows });
        });
      });
    };
    

    【讨论】:

    • 显然我可以做到,但是如何在中间件中实现呢?
    • @HackaTunes 不幸的是,sqlite3 不支持原生异步等待支持,如果您需要中间件,则必须进行异步等待。请在下面找到一个完整的工作示例。您可以一直向下滚动。我还更新了我的答案以包含代码中最重要的部分。 blog.pagesd.info/2019/10/29/use-sqlite-node-async-await
    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多