UnhandledPromiseRejectionWarning: Ошибка: свойство 'пароль' не существует.пг-обещание - PullRequest
0 голосов
/ 26 февраля 2019

Я использую pg-обещание.

У меня возникла проблема при попытке вставить следующий массив Javascript:

[ { email: 'test1@gmail.com', password: 'test2' },
  { email: 'tes2t@gmx.com', password: 'test'3 },
  { email: 'test4@gmail.com', password: 'test4' },
  { email: 'test4@yahoo.com.ar', password: 'test5' }]

Использование следующего:

async function insertDB(data){
  const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});
  console.log(data)
  const query = pgp.helpers.insert(data, cs);

  db.none(query)
      .then(data => {
          logger.info(" Query success: ", data);
  })
  .catch(error => {
      logger.warn(" Query error: ", error);
  });
}

и я получаю

UnhandledPromiseRejectionWarning: Ошибка: свойство 'пароль' не существует.

**data.password = undefined**
**data[0] = { email: 'test1@gmail.com', password: 'test2' }**

Как я могу вставить эти данные в свой postgresdb?

1 Ответ

0 голосов
/ 26 февраля 2019
// should create columnsets only once:
const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});

function insertDB(data) {

  // wrapping it into a function is safer, for error-reporting via query methods:
  const query = ()=> pgp.helpers.insert(data, cs);

  db.none(query)
      .then(data => {
          // data = null always here, no point displaying it
          logger.info('Query success:', data);
  })
  .catch(error => {
      logger.warn('Query error:', error);
  });
}

И ваша функция не нуждается в async в этом случае.

UnhandledPromiseRejectionWarning: Ошибка: свойство 'пароль' не существует.

Вы путаете компилятор JavaScript, объявляя функцию как async, а затем генерируя ошибку синхронно при генерации вставки, из-за отсутствующего свойства password.

И если вы хотите вставить некоторые записи безпароль, например null, определите ваш набор столбцов следующим образом:

const cs = new pgp.helpers.ColumnSet([
    'email',
    {name: 'password', def: null}
], {table: 'users'});

Кроме этого, тип ColumnSet в конечном итоге гибкий, см. документацию для каждого содержащегося Столбец .

EXTRA

И если вы хотите использовать значение DEFAULT на стороне сервера для пропущенных паролей, вы можете указать его с помощью команды Форматирование пользовательских типов :

const DEFAULT = {rawType: true, toPostgres: ()=> 'DEFAULT'};

И тогда ваш столбец password может быть определен так:

{name: 'password', def: DEFAULT}

И есть много альтернатив со свойствами init и mod поддерживаются Column .

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