Разрешение обещания не определено, но данные все еще РАЗМЕЩЕНЫ - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь отправить данные в свою локальную базу данных 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 ]

2 голосов
/ 02 августа 2020

Это может решить вашу проблему:

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, чтобы дождаться завершения вашего запроса sh перед закрытием соединения.

0 голосов
/ 02 августа 2020

Обратный вызов поддерживает один и только один параметр. Объект ошибки. https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql -param - callback .

Я думаю, вам нужно использовать метод Database # all, чтобы найти все строки. https://github.com/mapbox/node-sqlite3/wiki/API#databaseallsql -param - обратный вызов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...