Ошибка в Node.js при отправке формы для входа
При отправке формы для входа на сайт сервер сообщает об ошибке при сравнении пароля bcrypt.compare. Хотя в Postmone функция работает, как часы.
Вот функция в Node.js:
async getOneUser (req, res) {
try{
(async()=>{
const { name, email, pass} = req.body
db.query('SELECT * FROM users WHERE name=$1::text AND email=$2::text', [name, email] , (err, row) =>{
if(err){
console.log('Error executing query', err.stack);
}
(async()=>{
const hash = await bcrypt.compare(pass, row.rows[0].pass)
if(hash){
res.json(row.rows)
}else{
res.json({"message": "Такого полязователя нет с таким email"})
}
})();
});
})();
}catch(e){
console.log(e);
res.send({message: "Ошобка сервера getOneUser"})
}
}
Вот функция в React на запрос на сервер:
export const auth = (name, email, pass) =>{
return async dispatch => {//этот dispatch нужно от куда либо экспортировать?
try{
const response2 = await axios.get(`http://localhost:5000/api/login`, {
name,
email,
pass
})
console.log(response2.data)
}catch(e){
alert(e.response2.data)
}
}
}
Вот форма в React:
import React, { useState } from 'react';
import Input from '../../assets/utils/input/Input';
import './Auth.css'
import {useDispatch} from "react-redux";
import { auth } from '../../action/user';
const Auth = () => {
const[name, setName]=useState("")
const[email, setEmail]=useState("")
const[pass, setPass]=useState("")
const dispatch = useDispatch()
return(
<div className='auth'>
<div className='auth__header'>Авторизация</div>
<Input value={name} setValue={setName} type="name" placeholder="Введите Имя..."/>
<Input value={email} setValue={setEmail} type="email" placeholder="Введите Email..."/>
<Input value={pass} setValue={setPass} type="pass" placeholder="Введите Пароль..."/>
<button className='auth__btn' onClick={()=>dispatch(auth(name, email, pass))}>Войти на сайт</button>
</div>
)
}
export default Auth;
Это ошибка которую возвращает функция async getOneUser:
C:\Users\User\Desktop\Fullstack\server\controller\user.controller.js:77
const hash = await bcrypt.compare(pass, row.rows[0].pass)
^
TypeError: Cannot read properties of undefined (reading 'pass')
at C:\Users\User\Desktop\Fullstack\server\controller\user.controller.js:77:77
at C:\Users\User\Desktop\Fullstack\server\controller\user.controller.js:83:23
at Query.<anonymous> (C:\Users\User\Desktop\Fullstack\server\node_modules\pg-pool\index.js:421:18)
at Query.handleReadyForQuery (C:\Users\User\Desktop\Fullstack\server\node_modules\pg\lib\query.js:139:14)
at Client._handleReadyForQuery (C:\Users\User\Desktop\Fullstack\server\node_modules\pg\lib\client.js:290:19)
at Connection.emit (node:events:390:28)
at C:\Users\User\Desktop\Fullstack\server\node_modules\pg\lib\connection.js:114:12
at Parser.parse (C:\Users\User\Desktop\Fullstack\server\node_modules\pg-protocol\dist\parser.js:40:17)
at Socket.<anonymous> (C:\Users\User\Desktop\Fullstack\server\node_modules\pg-protocol\dist\index.js:11:42)
at Socket.emit (node:events:390:28)
[nodemon] app crashed - waiting for file changes before starting
Так же в консоли в браузере вот такие ошибки?
xhr.js:220 GET http://localhost:5000/api/login net::ERR_CONNECTION_RESET
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data')
at user.js:31:1
Ответы (1 шт):
Автор решения: kotleni
→ Ссылка
Отправляйте POST запрос вместо GET, тогда у вас получится прикрепить тело (body).
// ...
const response2 = await axios.get(`http://localhost:5000/api/login`, {
name,
email,
pass
})
// ...