Скрипт nodejs с экспресс и криптовалютой имеет ошибку при запросе регистрации

Я изучаю nodejs и mongo db, и я написал rest api для регистрации и входа в систему, но он дает ошибку, когда я пытаюсь опубликовать запрос на регистрацию. это мой код:

//Import package
var mongodb = require('mongodb');
var ObjectID = mongodb.ObjectID;
var crypto = require('crypto');
var express = require('express');
var bodyParser = require('body-parser');
 
//PASSWORD ULTILS
//CREATE FUNCTION TO RANDOM SALT
var genRandomString = function(length) {
  return crypto.randomBytes (Math.ceil(length/2))
    .toString('hex')
    .slice (0,length);
}
 
var sha512 = function(password,salt){
  var hash = crypto.createHmac('sha512',salt);
  hash.update(password);
  var value = hash.digest('hex');
  return {
    salt:salt,
    passwordHash:value
  };
}
 
function saltHashPassword(userPassword) {
  var salt = genRandomString(16);
  var passwordData = sha512(userPassword,salt);
  return passwordData;
}
 
function chackHashPassword(userPassword,salt){
  var passwordData = sha512(userPassword,salt);
  return passwordData;
}
 
//CREATE EXPRESS SERVICE
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
 
//CREATE MOMGODB CLIENT
var MongoClient = mongodb.MongoClient;
 
//CREATE URL
var url = 'mongodb://localhost:27017'
 
MongoClient.connect(url,{useNewUrlParser: true} , function(err,client){
  if (err)
    console.log('Unable to connect to the MongoDB server.Error',err);
  else{
    //REGISTER
    app.post('/register',(request,response,next)=>{
      var post_data = request.body;
 
      var plaint_password = post_data.password;
      var hash_data = saltHashPassword(plaint_password);
 
      var password = hash_data.passwordHash;
      var salt = hash_data.salt;
 
      var name = post_data.name;
      var email = post_data.email;
 
      var insertJson = {
        'email': email,
        'password': password,
        'salt': salt,
        'name': name
 
      };
      var db = client.db('androidlearn')
      //CHECK IF EXISTS EMAIL
      db.collection('user')
        .find({'email':email}).count(function(err,number){
          if(number != 0)
          {
            response.json ('Email already exists');
            console.log ('Email already exists');
          }
          else {
            //INSERT DATA
            db.collection('user')
              .insertOne(insertJson,function(error,res){
                response.json ('Registeration Successfull');
                console.log ('Registeration Successfull');
              })
          }
        })
    });
 
    //LOGIN
    app.post('/login',(request,response,next)=>{
      var post_data = request.body;
 
      var email = post_data.email;
      var userPassword = post_data.password;
 
      var db = client.db('androidlearn')
      //CHECK IF EXISTS EMAIL
      db.collection('user')
        .find({'email':email}).count(function(err,number){
          if(number == 0)
          {
            response.json ('Email not exists');
            console.log ('Email not exists');
          }
          else {
            //INSERT DATA
            db.collection('user')
              .findOne({'email' :email},function(err,user){
                  var salt = user.salt;
                  var hashed_password = checkPassword(userPassword,salt).passwordHash;
                  var encrypted_password = user.password;
                  if (hashed_password == encrypted_password)
                  {
                    response.json ('Login Successfull');
                    console.log ('Login Successfull');
                  }
                  else{
                    response.json ('Password Wrong');
                    console.log ('Password Wrong');
                  }
                })
          }
        })
    });
    //START WEB SERVER
    app.listen(3000,()=>{
      console.log('Connected to MongoDB Server , WebService running on port 3000');
    })
  }
})

и это ошибка, которую я получил, когда отправлял запрос расширенного клиента отдыха:

TypeError [ERR_INVALID_ARG_TYPE]: аргумент "данные" должен иметь строковый тип или экземпляр Buffer, TypedArray или DataView. Получено undefined в Hmac.update (internal/crypto/hash.js:84:11) в sha512 (D:\Work Space\NodeJS\node_mongo_rest_api\index.js:18:8) в saltHashPassword (D:\Work Space\NodeJS\node_mongo_rest_api\index.js:28:22) в D:\Work Space\NodeJS\node_mongo_rest_api\index.js:56:23 в Layer.handle [как handle_request] (D:\Work Space\NodeJS\node_mongo_rest_api\node_modules\express\lib\router\layer.js:95:5) в следующем (D:\Work Space\NodeJS\node_mongo_rest_api\node_modules\express\lib\router\route.js:137:13) в Route.dispatch (D:\Work Space\NodeJS\node_mongo_rest_api\node_modules\express\lib\router\route.js:112:3) в Layer.handle [как handle_request] (D: \ Work Space \ NodeJS \ node_mongo_rest_api \ node_modules \ express \ lib \ router \ layer.js:95:5) в D:\Work Space\NodeJS\node_mongo_rest_api\node_modules\express\lib\router\index.js:281:22 в Function.process_params (D:\Work Space\NodeJS\node_mongo_rest_api\node_modules\express\lib\router\index.js:335:12)

Спасибо за помощь

0 ответов

Другие вопросы по тегам