我正在尝试将数据发布到本地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 () {
})
})
答案 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。