BCrypt TypeError: Невозможно прочитать свойство 'value' из неопределенных NodeJs - PullRequest
3 голосов
/ 11 ноября 2019

Я пытаюсь добавить соль в мой пароль, но у меня есть эта ошибка:

(узел: 12652) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'value' из неопределенного

(узел: 12652) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1)

(узел: 12652) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания не рекомендуется. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.

my auth / index.js

const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
const someOtherPlaintextPassword = 'not_bacon';

const salt = bcrypt.genSaltSync(saltRounds);

exports.modules = {
    salt
}

myконтроллер:

const Users = require('../models/users');
const bcrypt = require('bcrypt');
const { salt } = require('../auth/index');

const getUsers = ((req,res) => 
    Users.findAll()
    .then((result) => { 
        res.json(result) 
    })
    .catch((error) => { res.json(error) })
    )

const addUsers = (async (req,res,next) => {
    const name = req.body.name;
    const email = req.body.email;
    let password = bcrypt.hashSync(req.body.password, salt.value);
    const data = {
        name,
        email,
        password
    }; 
    console.log(data);
    Users.create(data)
    .then((result) => { res.json(result) })
    .catch((error) => { res.json(error) });
});

module.exports = {
    getUsers,
    addUsers,
    Users
}

1 Ответ

2 голосов
/ 11 ноября 2019

Вы экспортировали функцию salt. Вы пытаетесь получить доступ к его объекту, который, конечно, не определен, поскольку у этого объекта нет имени свойства value. Таким образом, это дает вам UnhandledPromiseRejectionWarning ошибку. Salt функция уже возвращает значение.

И еще одна вещь, это должно быть module.exports в auth/index.js.

Вы должны вернуть значение из функции. Вот как вы можете переписать весь процесс.

index.js

const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
const someOtherPlaintextPassword = 'not_bacon';

module.exports.salt= function(){
return bcrypt.genSaltSync(saltRounds); }

Вы можете ожидать функцию соли на уровне контроллера.

let password = await bcrypt.hashSync(req.body.password, salt());

Вот и все. Теперь, я думаю, ваш код будет работать.

...