如何通过查询 sqlite3 数据库 return 行中的值?

How do I return a value from a row by querying a sqlite3 database?

我正在为一些基于 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() 对其进行了调试并记录了正确的值。 然而,即使我认为我返回了 row 值,routes/index.js 仍将其视为未定义。 如何正确 return 值以便我可以在 routes/index.js 中访问它?

这是一个不return任何东西的异步函数。

只需 return 回复快递:

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
        })
      });
});

如果您需要 运行 更多代码,请参阅:

中间件所需功能,添加到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 });
    });
  });
};