Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过查询sqlite3数据库从行返回值?_Javascript_Node Sqlite3 - Fatal编程技术网

Javascript 如何通过查询sqlite3数据库从行返回值?

Javascript 如何通过查询sqlite3数据库从行返回值?,javascript,node-sqlite3,Javascript,Node Sqlite3,我正在为一些基于sqlite3的expressjs应用程序编写一些数据库中间件。 这是我的目录结构: | app | database index.js | routes index.js database/index.js包含: module.exports.getLinkById=函数(id){ get(`SELECT redir FROM root WHERE id=“${id}”`,[],函数(err,row

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

     | app
       | database
          index.js
       | routes
          index.js
database/index.js包含:

module.exports.getLinkById=函数(id){
get(`SELECT redir FROM root WHERE id=“${id}”`,[],函数(err,rows){
试一试{
变量行=行;
console.log(row.redir);//成功地使用正确的值记录redir attr
返回行;
}捕获(e){
投掷e;
}
});
};
而routes/index.js包含:

var-database=require('../database');
console.log(database.getLinkById(“afb8”);//未定义
在database/index.js文件中,选择并返回基于id的行。对于调试,我
console.log()
ged它并记录正确的值。 然而,即使我返回了
值,routes/index.js仍将其视为未定义。
如何正确地
返回
值,以便在
routes/index.js
中访问该值?

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

只需返回express的响应:

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

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

只需返回express的响应:

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

这正是我所需要的,但我没有足够的能力知道如何在我的案例中实现它。你能和我分享一个片段吗?这正是我所需要的,但我没有足够的能力知道如何在我的案例中实现它。你能和我分享一个片段吗?显然我能做到,但我如何在中间件中实现它?@HackaTunes不幸的是,sqlite3不支持本机异步等待支持,如果你需要一个中间件,它必须执行异步等待。请在下面找到一个完整的工作示例。你可以一直向下滚动。我还更新了我的答案,以包含代码中最重要的部分。显然我可以做到这一点,但我如何在中间件中实现它?@HackaTunes不幸的是,sqlite3不支持本机异步等待支持,如果您需要一个中间软件,它必须执行异步等待。请在下面找到一个完整的工作示例。你可以一直向下滚动。我还更新了我的答案,以包含代码中最重要的部分。