Задать вопрос
@AJIEKC_10

Как поправить этот код чтобы можно было обновить данные в бд( при взаимодействии с методом класса в Node.js)?

По post запросу получаю данные и обрабатываю их методом update
app.post('/users/:id/edit', (req, res, next) => {
    const id = req.params.id
    if (!req.body) return res.sendStatus(400)
    us_crud.update(
        id,
        {firstName: req.body.firstName, lastName: req.body.lastName, email: req.body.email, image: req.body.image},
        (err) => {
            if(err) return next(err)
            return res.redirect('/users')
        }
    )
})


метод update в файле с классом
static update(id, cb, data) {
        if(!id) return cb(new Error('Please provide an id'))
        const sql_upd = `UPDATE users SET firstName = ?, lastName = ?, email = ?, image = ? WHERE id = ?`
        db.run(sql_upd, data.firstName, data.lastName, data.email, data.image, id, cb)
    }
}


Ошибка:
[Error: SQLITE_RANGE: column index out of range
Emitted 'error' event on Statement instance at:
] {
  errno: 25,
  code: 'SQLITE_RANGE'
}


Другие методы класса, такие как удаление, выборка, вставка отлично работают. Ошибка лишь при обновлении.
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Zraza
@Zraza
Помог ответ? Отметь решением!
Проверьте тот запрос, который отправляется в БД. В библиотеке по работе с БД наверняка должен быть режим отладки.
Подозреваю, у вас порядок аргументов не тот:
Тут data идет третьим аргументом: static update(id, cb, data)
А тут объект передается вторым:
us_crud.update(
        id,
        {firstName: req.body.firstName, lastName: req.body.lastName, email: req.body.email, image: req.body.image},
        (err) => {...}
    )

Я рекомендую не забивать на типизацию, дабы не сталкиваться с такими ошибками. =)
Например:
static update(id: string, cb: (err?: Error) => void, data: Record<string, string | number | bool>)


Еще могу посоветовать перейти на промисы. Подход с коллбэками уже изрядно устарел.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы