将散列密码存储到数据库时出错

Error while storing hashed password into database

我正在用nodejs构建一个用户注册和认证系统。当我尝试加密用户的密码并将其存储到我的 sql 用户数据库时,它给出了一个错误。

注册控制器实现如下:

var express=require("express");
var connection = require('./../config');
const bcrypt = require('bcrypt')

module.exports.register=function(req,res){
    var today = new Date();
    var encryptedString = bcrypt.hashSync(req.body.password, 5);
    var user={
        "userid":req.body.userid,
        "password":encryptedString,
        "clientid":req.body.clientid,
        "email":req.body.email
    }
    connection.query('INSERT INTO user SET ?',user, function (error, results, fields) {
      if (error) {
        res.json({
            status:false,
            message:'query error'
        })
      }else{
          res.json({
            status:true,
            data:results,
            message:'user registered sucessfully'
        })
      }
    });
}

用户table具有以下结构

CREATE TABLE `user`(
`userid` varchar(25) NOT NULL,
`password` varchar(60) NOT NULL,
`clientid` varchar(25) NOT NULL,
PRIMARY KEY (`userid`),
CONSTRAINT `user_ibfk_1` FOREIGN KEY (`clientid`) REFERENCES `client`(`clientid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

不进行密码加密,用户存储成功,密码为明文。为什么加密密码会出现这个问题?

任何澄清这一点的帮助将不胜感激。

这是 console.log(错误)的结果:

code: 'ER_BAD_FIELD_ERROR',
  errno: 1054,
  sqlMessage: "Unknown column 'email' in 'field list'",
  sqlState: '42S22',
  index: 0,
  sql: "INSERT INTO user SET `userid` = '1', `password` = " +
    "'b[=12=]D2eG3Jp.UhlYs.pbtYip.yMrCYkjhHiVZC3WwrtmKJG4pyRKZDae', " +
    "`clientid` = '1', `email` = 'abc@xyz.com'"
}

Unknown column 'email' in 'field list'

这是不言自明的。您的 table 中没有确认您已提供 DDL 的电子邮件列。

`userid` varchar(25) NOT NULL,
`password` varchar(60) NOT NULL,
`clientid` varchar(25) NOT NULL,

没有电子邮件

当您通过用户发送时

var user={
    "userid":req.body.userid,
    "password":encryptedString,
    "clientid":req.body.clientid,
    "email":req.body.email
}