Скрипт 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)
Спасибо за помощь