未解决未解决的问题,但数据仍已发布

时间:2020-08-02 17:58:12

标签: javascript node.js sqlite express electron

我正在尝试将数据发布到本地sqlite数据库。数据在POST之后显示在我的数据库表中,但是Promise.resolve()返回为undefined,这反过来又不会将结果返回给客户端。我想念什么吗?

任何帮助将不胜感激。这就是我得到的。

module.exports.addAccount = function (data) {

const db_conn = new sqlite3.Database( path.join(__dirname, "../user_database.sql") )

return new Promise( function (resolve, reject) {

   db_conn.serialize( function () {
     // insert row
     db_conn.run("INSERT INTO some_table (username) VALUES (?);", [data.username], function (err,rows) {

            if (!err) {
                console.log(rows) // always returns undefined

                resolve([rows, this.lastID])
            } else {
                reject(err)
            }

         })
     })
    db_conn.close()
  })

}

然后:

app.post("/add-row", function (req, res) {
user_info.addAccount(req.body).then( function(response) {
    
    res.json({
        rows: response[0], // this is undefined
        row_id: response[1] // this is not
    })
}).catch(function () {

})
})

2 个答案:

答案 0 :(得分:2)

这可以解决您的问题:

db_conn.run("INSERT INTO some_table (username) VALUES (?);", ['string'], function (err) {
  if (!err) {
    db_conn.get("SELECT * FROM some_table WHERE rowid=?", [this.lastID], function(err, rows) {
      db_conn.close()
      resolve([rows])
    })
  } else {
    reject(err)
  }
})

我假设使用rowid,但是您的表可能还有另一个主键。我也建议采用async/await而不是Promise来等待查询完成,然后再关闭连接。

答案 1 :(得分:-1)

回调仅支持一个参数。错误对象。 https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql-param--callback

我认为您需要使用Database#all方法查找所有行。 https://github.com/mapbox/node-sqlite3/wiki/API#databaseallsql-param--callback