对于 salt 和散列密码,我使用了 Bcrypt 方法,但它显示,error = new Error('data and salt arguments required');

for salt and hashing passwords i used Bcrypt method but its showing , error = new Error('data and salt arguments required');

对于 salt 和散列密码,我使用了 Bcrypt 方法,但它显示, 错误=新错误('data and salt arguments required'); 我认为我的代码有问题,我需要帮助; 电子商务网站是我的项目,所以我在用户面板中创建了注册表单

*user.js

const userHelpers=require('../helpers/user-helpers')
 
router.get('/signup',(req,res)=>{
   res.render('user/signup')
})

router.post('/signup',(req,res)=>{
  userHelpers.doSignup(req.body).then((response)=>{
     console.log(response);
  })

用户-helpers.js

var db=require('../config/connection')
 var collection=require('../config/collections')
 const bcrypt=require('bcrypt')

module.exports={
    doSignup:(userData)=>{
        return new Promise(async(resolve,reject)=>{
            // var salt =  await bcrypt.genSalt(10);
            userData.Password= await bcrypt.hash(userData.Password ,10)
                db.get().collection(collection.USER_COLLECTION).insertOne(userData).then((data)=>{

                    resolve(data) 
                });
                     
            });
          
    }

collection.js

module.exports={
    PRODUCT_COLLECTION:'product',
    USER_COLLECTION:'user'
}  

这是我的代码,但是错误提示

error = new Error('data and salt arguments required');
                ^

Error: data and salt arguments required

如何解决问题..

根据您得到的错误,函数 bcrypt.hash 似乎失败了,因为 userData.Password 可能未设置。 确保在请求中正确获得 userData.Password。 如果您使用 express,您可能无法转换为 JSON,因此添加一个中间件来将数据解析为 JSON,例如:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

看看这些以前的问题和答案:

  • How do I consume the JSON POST data in an Express application

谢谢,我找到了解决方案。问题在user-helpers.js.

user-helpers.js


    const bcrypt = require('bcrypt')
         
    module.exports={
        doSignup:(userData)=>{
            return new Promise (async(resolve,reject)=>{
          
            userData.password=await bcrypt.hash(userData.password,10)
                   
                      db.get().collection(collection.USER_COLLECTION).insertOne(userData).then((data)=>{
                        resolve(data) 
                        // console.log(userData.password)
                        // console.log(userData.email)                    
                    });
                    });
                 
         }
    ```