Я пытаюсь подключиться к базе данных postgres из Node JS / Express. Нет ответа в Почтальон - PullRequest
1 голос
/ 21 апреля 2019

В какой-то момент порт был активным и работающим, но в Почтальоне ответа не было.

И теперь он даже не распознает экспресс, даже если он включен. Может кто-нибудь, пожалуйста, помогите мне, я пытался решить эту проблему в течение нескольких дней ...

Я попытался изменить подключение к базе данных postgres с помощью knex, создал базу данных в Pg admin, но это не работает. Я хотел иметь несколько маршрутов для входа, регистрации и удаления профиля пользователя, но кажется, что Express по какой-то причине не работает. Я попытался изменить .catch в app.post (зарегистрироваться) на .catch (err => res.json (err)), также я установил расширение corse для Chrome, но оно тоже не сработало. Я изменил некоторые слова из кода (с моего родного языка, чтобы его было легче просмотреть, я извиняюсь, если есть место, которое я пропустил ... Мне пришлось вставить весь код, потому что ошибка может быть в той части, которую я опускаю). В этот момент на выходе Express не распознается как установленный.

const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt-nodejs');
const cors = require('cors');
const knex = require('knex');


const app = express();
app.use(bodyParser.json());
app.use(cors());

let db = knex({
    client: 'pg',
    connection: {
      host : '127.0.0.1',
      user : 'postgres',
      password : '12345',
      database : 'users'
    }
  });
/*app.get('/', (req, res) => {
  db.select('*').from('users').then(data => {res.json(data)});
})*/
//USER LOGIN
  app.post('/signin', (req, res) => {
    db.select('email', 'hash').from('login')
      .where('email', '=', req.body.email)
      .then(data => {
        const isValid = bcrypt.compareSync(req.body.password, data[0].hash);    
        if (isValid) {
        return db.select('*').from('login')
        .where('email', '=', req.body.email)
        .then(user => {
          res.json(user[0])
        })
        .catch(err => res.status(400).json('Cannot find user'))
        } else {
          res.status(400).json('Incorrect log in data')
        }
       })
       .catch(err => res.status(400).json('Incorrect data'))
    });
// REGISTER USER
    app.post('/register', (req, res) => {
      const {email, name, password} = req.body;
      const hash = bcrypt.hashSync(password);
          db.transaction(trx => {
            trx.insert({
              hash: hash,
              email: email
            })
            .into('login')
            .returning('email')
            .then(loginEmail => {
                return trx('users')
                  .returning('*')
                  .insert({
                    email: loginEmail[0],
                    name: name,
                    resgistered: new Date()
                  })
                .then(user => {
                  res.json(user[0]);
                })
            })
            .then(trx.commit)
            .catch(trx.rollback)
          })
          .catch(err =>res.json(err))
    });
// user profile
    app.get('/profile/:id', (req, res) => {
        const {id} = req.params;
        db.select('*').from('users').where( {id: id})
        .then(user => {
        if (user.length) {
        res.json(user[0])
        } else {
        res.status(400).json('User not found')
        }
        });
    });

    app.get('/allusers', (req, res) => {
      //const {id} = req.params;
      //db.select('*').from('korisnici').then(data => {console.log(data)});
      db.select('*').from('users').then(data => {res.json(data)});
    });
//delete user
app.delete('/users/:name', (req, res) =>{
  const email = req.params.email;
  db.select()
    .from('users').where({email: email}).del()
    .then((users) =>{
        db.select()
        .from('login').where({email: email}).del()
        .then(() => {
            res.json(`user ${email} deleted`);
        });
    }).catch((error) => {
        console.log(error);
    });
});
//APPLICATION PORT
app.listen(3000, () =>{
    console.log(('Port 3000 active'));
    //res.send('Database active at port 3000')
});

1 Ответ

0 голосов
/ 21 апреля 2019

Убедитесь, что вы установили pg модуль:

 npm install pg --save

Вы уверены, что ваш БД называется users?Если так, то в вашем случае вам понадобится таблица login в users дБ.Затем также вставьте некоторые данные из pg admin в ваш users.login.

Вы также можете попробовать запросить данные непосредственно у администратора pg, используя SQL-запрос, чтобы убедиться, что данные действительно есть:

SELECT * FROM users.login;

Затем создайте следующий маршрут:

app.get('/', (req, res) => {
  db.select('*').from('login').then(data => {
    console.log(data);
    res.json(data);
  });
});

Затем попробуйте отправить запрос от Почтальона GET http://localhost:3000.

Примечание. Я бы посоветовал вам использовать правильное именование таблиц в БД, но не уверен, что вы хотите вызвать таблицу login.И попробуйте использовать async \ await вместо вложения с .then

Другим решением было бы создать проект с нуля, следуя этому простому учебнику

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