Работать с 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()
})
})
})
})
})