Как поправить этот код чтобы можно было обновить данные в бд( при взаимодействии с методом класса в 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') } ) }) |
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) } } |
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' } |
[Error: SQLITE_RANGE: column index out of range Emitted 'error' event on Statement instance at: ] { errno: 25, code: 'SQLITE_RANGE' }
Другие методы класса, такие как удаление, выборка, вставка отлично работают. Ошибка лишь при обновлении.
Дополнительно:
Проверьте тот запрос, который отправляется в БД. В библиотеке по работе с БД наверняка должен быть режим отладки.
Подозреваю, у вас порядок аргументов не тот:
Тут 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) => {...} ) |
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>) |
static update(id: string, cb: (err?: Error) => void, data: Record<string, string | number | bool>)
Еще могу посоветовать перейти на промисы. Подход с коллбэками уже изрядно устарел.
- А еще return res.redirect в коллбэке, кажется, не очень к месту
- Спасибо, помогло!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Для того чтобы обновить данные в базе данных при взаимодействии с методом класса в Node.js, необходимо убедиться, что ваш код корректно выполняет операцию обновления записи. Вот пример того, как можно поправить код для этой цели:
```php
class Database {
constructor() {
this.connection = // инициализация подключения к базе данных
}
async updateData(id, newData) {
try {
const query = `UPDATE table_name SET column1 = ?, column2 = ? WHERE id = ?`;
const values = [newData.value1, newData.value2, id];
await this.connection.query(query, values);
console.log('Данные успешно обновлены в базе данных');
} catch (error) {
console.error('Ошибка при обновлении данных в базе данных:', error);
}
}
}
// Пример использования метода updateData
const db = new Database();
const id = 1;
const newData = { value1: 'новое значение 1', value2: 'новое значение 2' };
db.updateData(id, newData);
```
В данном примере метод `updateData` принимает два аргумента: `id` - идентификатор записи, которую необходимо обновить, и `newData` - объект с новыми данными для обновления. Внутри метода формируется SQL запрос на обновление данных в таблице `table_name` по указанному `id`. После этого выполняется запрос к базе данных с использованием `this.connection.query`, где `query` - сам запрос, а `values` - массив значений для подстановки в запрос.
Помимо этого, в коде также добавлены обработчики ошибок для лучшей отладки и контроля над процессом обновления данных. Не забудьте заменить `table_name`, `column1`, `column2` на актуальные названия таблицы и колонок в вашей базе данных.
Таким образом, после внесения указанных изменений в ваш код, вы сможете успешно обновлять данные в базе данных при взаимодействии с методом класса в Node.js.

Для того чтобы обновить данные в базе данных при взаимодействии с методом класса в Node.js, необходимо следовать определенным шагам. Вот пример кода, который демонстрирует как это можно сделать:
// Подключаем модуль mysql для работы с MySQL const mysql = require('mysql'); // Создаем подключение к базе данных const connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'password', database : 'mydb' }); // Устанавливаем соединение с базой данных connection.connect(); // Создаем класс для работы с базой данных class Database { constructor() { this.connection = connection; } // Метод для обновления данных в базе данных updateData(id, newData) { const query = `UPDATE table_name SET column_name = ? WHERE id = ?`; this.connection.query(query, [newData, id], (error, results) => { if (error) { throw error; } console.log('Data updated successfully'); }); } } // Создаем экземпляр класса Database const db = new Database(); // Вызываем метод updateData для обновления данных в базе данных db.updateData(1, 'new_value');
В данном примере мы создаем класс Database, который содержит метод updateData для обновления данных в базе данных. Метод принимает два параметра - id записи, которую необходимо обновить, и новое значение данных. Затем мы создаем экземпляр класса Database и вызываем метод updateData с нужными параметрами.
Убедитесь, что в коде заменены значения host, user, password, database, table_name, column_name на актуальные значения для вашей базы данных. Также не забудьте установить и подключить модуль mysql перед использованием.
Этот код поможет вам обновить данные в базе данных при взаимодействии с методом класса в Node.js.