Работа с postgresql через node

Работа с postgresql через node

Работать с postgresql будем через библиотеку node-postgres:

На гитхабе: https://github.com/brianc/node-postgres

Сайт ее: https://node-postgres.com

Сайт самого postgesql: https://www.postgresql.org

Установим библиотеку:

npm install pg --save

Итого простой код получится:

const {Client} = require('pg');

const db = new Client({
    user: 'postgres',
    host: 'localhost',
    database: 'test',
    password: '1111',
    port: 5432  
});

db.connect();

db.query('SELECT * FROM cities', (err, data) => {
    if (err) 
        throw new Error(err);
    console.log(data, err);
    db.end();  
});

Организация кода

Код можно организовать например, так:

dp-config
  config
    index.js
  db
    index.js
  server-web
    index.js
  app.js

Где app.js

const server = require('./server-web');

server.serverWeb();

db/index.js

const { Pool } = require('pg')

const config = require('../config')

const pool = new Pool({
  user: config.user_db,
  host: config.host_db,
  database: config.name_db,
  password: config.password_db,
  port: config.port_db,
})

module.exports = {
  query: (text, params, callback) => {
    return pool.query(text, params, callback)
  },
}

server-web/index.js

const express = require('express');

const db = require('../db');

const app = express();

const PORT = process.env.PORT || 5000

function serverWeb(){

  app.get('/:id', (req, result, next) => {
    db.query('SELECT * FROM users WHERE id = $1', [req.params.id], (err, res) => {
      if (err) {

        const error = new Error('Ошибка приложения!');
        error.status = 500;
        error.message = err.message;
        return next(error); 
      }
      result.send(res.rows[0])
    })
  })

  app.use(function(req, res, next){
    const err = new Error('Ни хрена не найдено!');
    err.status = 404;
    next(err);   
  });
  
  app.use(function(err, req, res, next){
    res.status(err.status || 500);
    res.json({
      message: err.message,
      error: err
    })     
  })

  const server = app.listen(PORT, function () {  
    console.log('Сервер пашет на порту: ' + server.address().port);
  })

}

module.exports.serverWeb = serverWeb;

Выполнение запросов в транзакции

  pool.connect((err, client, done) => {
    const shouldAbort = err => {
      if (err) {
        console.error('Ошибка транзакции', err.stack)
        client.query('ROLLBACK', err => {
          if (err) {
            console.error('Ошибка при откате клиента', err.stack)
          }
          done()
        })
      }
      return !!err
    }

    client.query('BEGIN', err => {
      if (shouldAbort(err)) return
      const zaprNewTabl = `CREATE TABLE test();`;
      client.query(zaprNewTabl, (err, res)=>{
        if (shouldAbort(err)) return
        const zaprosRefresh = "SELECT table_name FROM information_schema.tables  WHERE table_schema='public'";
        client.query(zaprosRefresh, (err, res) => {
          if (shouldAbort(err)) return
          client.query('COMMIT', err => {
            if (err) {
              console.error('Ошибка при совершении транзакции', err.stack)
            }
            done()
          })
        })
      })
    })
  })

Оставить комментарий