首页 > 解决方案 > BCrypt TypeError:无法读取未定义 NodeJ 的属性“值”

问题描述

我正在尝试在密码中添加盐,但出现此错误:

(节点:12652)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“值”

(节点:12652)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。(拒绝编号:1)

(节点:12652)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

我的 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
}

我的控制器:

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
}

标签: javascriptnode.jsbcrypt

解决方案


您导出了一个salt函数。您正在尝试访问它的对象,该对象当然是未定义的,因为该对象没有属性 name value。所以,它给你一个UnhandledPromiseRejectionWarning错误。Salt函数已经返回一个值。

还有一件事,它应该module.exportsauth/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());

而已。现在,我认为您的代码将起作用。


推荐阅读