# Взаимодействие с БД

Необходимо обязательно установить следующий пакет для NodeJS

```javascript
npm install pg@6.1.0 --save
```

Зададим пароль пользователю базы данных

```
\password postgres
```

Создадим базу данных

```
CREATE DATABASE b12345;
```

Подключаемся к базе данных

```
psql \c b12345
```

Создадим таблицу для хранения информации о людях

```
CREATE TABLE people
(
   man_id BIGSERIAL PRIMARY KEY,
   man_nickname TEXT,
   man_age INTEGER
);
```

Подключаем модули

```javascript
"use strict";

let express = require("express");
let app = express();
let pg = require('pg');
```

Разрешаем междоменные запросы

```javascript
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
```

Описываем функцию создания нового клиента для подключения к БД

```javascript
function createNewClient() {
    return new pg.Client({
        user: 'postgres',
        host: 'localhost',
        database: 'b12345',
        password: '123',
        port: 5432
    });
}
```

Описываем функцию отправки запроса в БД и получения ответа от неё

```javascript
function makeQuery(query, resultObj, callback) {
    const client = createNewClient();
    client.connect();

    client.query(query, (err, res) => {
        resultObj.arr = res.rows;
        client.end();
        callback();
    });
}
```

Запускаем сервер

```javascript
let port = process.env.PORT || 5005;
app.listen(port);
console.log("Server works on port " + port);
```

Описываем функцию для получения списка всех людей в БД

```javascript
app.get('/get_all_records', (request, response) => {
   let aaa = {
      arr: []
   };

   makeQuery("SELECT * FROM people ORDER BY man_id ASC;", aaa, () => {
       const answer = aaa.arr;
       response.end(JSON.stringify(answer));
   });
});
```

Описываем функцию для добавления человека в БД

```javascript
app.post('/add_one_record', (request, response) => {
    let bigString = "";
    request.on('data', (data) => {
        bigString += data;
    }).on('end', () => {
        const dataObj = JSON.parse(bigString);

        const nickname = dataObj.nickname;
        const age = dataObj.age;

        let aaa = {
            arr: []
        };

        makeQuery("SELECT * FROM people WHERE man_nickname = '" + nickname + "';", aaa, () => {
            if(aaa.arr.length > 0) {
                const answer = {
                   message: "NO_ADDING"
                };
                response.end(JSON.stringify(answer));
            } else {
                makeQuery("INSERT INTO people (man_nickname, man_age) VALUES ('" + nickname + "', " + age + ");", {}, () => {
                    const answer = {
                        message: "ADDING_SUCCESS"
                    };
                    response.end(JSON.stringify(answer));
                });
            }
        });
    });
});
```
