Как мне отловить psql ошибок в узле? - PullRequest
0 голосов
/ 12 июля 2020

В настоящее время я пишу сервер внутреннего узла с базой данных Postgresql, где я пытался настроить регистрационный API. Я хочу иметь возможность обнаруживать ошибки, вызванные нарушениями уникальных ограничений. Как я могу это сделать?

function createMember(body, callBack){  
  // This function adds someone who is newly registered to the database.

  var id;
  var sql = 'INSERT INTO member (fname, lname, phone, email, age, gender) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id;';
  db.query(sql, [body.fname, body.lname, body.phone, body.email, body.age, body.gender]).then(res => {
      id = res.rows[0].id;
      if (id) {
        callBack(body);
        console.log("New member with id: " + id);
      }
  }).catch(e => {
      if (the error is a unique constraint violation){
        console.log("\n ERROR! \n Individual with name: " + body.fname + " " + body.lname + " and phone #: " + body.phone + " is a duplicate member. \n");
        callBack("Duplicate");
        return;
      }
      console.log("\n \n ERROR! \n Individual with name: " + body.fname + " " + body.lname + " and phone #: " + body.phone + " could not be added. \n", e);
      callBack(false);
      return e;
  })
}

1 Ответ

0 голосов
/ 12 июля 2020

Так как я не нашел на это ответов, думаю, могу поделиться своим.

Каждая ошибка в Postgresql имеет код ошибки, который можно найти по адресу: https://www.postgresql.org/docs/12/errcodes-appendix.html

Если вы посмотрите на ошибку, которую вы получаете при нарушении уникального ключа, вы можете заметить, что код - «23505».

Просто добавьте чек в свой блок catch к проверьте, есть ли у ошибки код «23505».

function createMember(body, callBack){  
  // This function adds someone who is newly registered to the database.

  var id;
  var sql = 'INSERT INTO member (fname, lname, phone, email, age, gender) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id;';
  db.query(sql, [body.fname, body.lname, body.phone, body.email, body.age, body.gender]).then(res => {
      id = res.rows[0].id;
      if (id) {
        callBack(body);
        console.log("New member with id: " + id);
      }
  }).catch(e => {
      if (e.code == '23505'){
        console.log("\n ERROR! \n Individual with name: " + body.fname + " " + body.lname + " and phone #: " + body.phone + " is a duplicate member. \n");
        callBack("Duplicate");
        return;
      }
      console.log("\n \n ERROR! \n Individual with name: " + body.fname + " " + body.lname + " and phone #: " + body.phone + " cannot be added. \n", e);
      callBack(false);
      return e;
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...