#javascript #node.js #postgresql #express
#javascript #node.js #postgresql #экспресс
Вопрос:
В какой-то момент порт был активен и работал, но ответа в Postman не было.
И теперь он даже не распознает express, хотя он включен. Может кто-нибудь, пожалуйста, помогите мне, я уже несколько дней пытаюсь решить эту проблему…
Я попытался подключиться к базе данных postgres с помощью knex, создал базу данных в Pg admin, но это не работает. Я хотел иметь несколько маршрутов для входа в систему, регистрации и удаления профиля пользователя, но, похоже, Express по какой-то причине не работает. Я попытался изменить .catch в app.post(register) на .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. Пожалуйста, укажите сообщения об ошибках, если таковые имеются
2. вот сообщение: ReferenceError: приложение не определено в объекте.<анонимный> (c:UsersAmlebCDesktopprojekattempCodeRunnerFile.js:1:63 ) в модуле._compile (module.js:643:30) в объекте. Module._extensions..js (module.js:654:10) в модуле. загрузка (module.js:556:32) в tryModuleLoad (module.js: 499:12) в функции. Модуль. _load (module.js:491:3) в функции. Module.runMain (module.js: 684:10) при запуске (bootstrap_node.js: 187:16) при bootstrap_node.js: 608:3 [Готово] завершается с кодом = 1 за 4,492 секунды
3. вот мой файл json { «name»: «projekat», «version»: «1.0.0», «description»: «novi projekat», «main»: «server.js «, «scripts»: { «test»: «echo «Ошибка: тест не указан » amp;amp; exit 1″, «start»: «узел server.js » }, «автор»: «», «лицензия»: «ISC», «зависимости»: { «bcrypt»: «^ 3.0.6», «body-parser»: «^ 1.18.3», «cors»: «^ 2.8.5», «express»: «^ 4.16.4», «knex»: «^ 0.16.5», «nodemon»: «^ 1.18.11», «pg»: «^ 7.10.0» } }
Ответ №1:
Убедитесь, что вы установили 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);
});
});
Затем попробуйте отправить запрос от Postman GET http://localhost:3000
.
Примечание: я бы посоветовал вам использовать правильные имена таблиц в БД, не уверен, что вы хотели вызвать таблицу login
. И попробуйте использовать async await вместо вложения с .then
Другим решением было бы создать проект с нуля, следуя этому простому руководству