dmc1989
@dmc1989

Как сделать правильный insert в mysql + node.js?

Пытаюсь сделать грамотное создание таблицы если если ее не существует при первой записи данных в нее, но код получился не очень красивый, можно ли написать получше?

insert(tableName, values) {
    return new Promise((resolve, reject) => {
      this.pool.query(`INSERT INTO ${tableName}(username, password, image) VALUES('${values.join("', '")}')`)
        .then(resolve)
        .catch(err => {
          // if TABLE doesn't exists
          if (err.errno == 1146) {
            this.createTable(tableName)
              .then(newTable => {
                console.log("New table created!\n", newTable);
                this.insert(tableName, values)
                  .then(resolve)
                  .catch(reject);
              })
              .catch(reject);
          }
        });
    });
  }
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
я бы попробовал как-то так:
function insert(tableName, values) {
	return this.pool.query(`INSERT INTO ${tableName}(username, password, image) VALUES('${values.join("', '")}')`)
		.catch(err => {
			// if TABLE doesn't exists
			if (err.errno == 1146) {
				return this.createTable(tableName)
					.then(newTable => {
						console.log('New table created!\n', newTable);
						return this.insert(tableName, values);
					})
			} else {
				throw err;
			}
		});
}


1. если "this.pool.query" возвращает промис, то новый создавать смысла нет.
2. Если из then или catch вернуть проми то дальше можно продолжать цепочку
3. В этом коде SQL Injection - в зависимости от используемого пакета надо посмотреть как правильно передавать параметры в запрос что бы избежать этой уязвимости
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы