javascript - 捕获sequelize模型中的错误

标签 javascript node.js postgresql express sequelize.js

我在sequelize中定义了这个模型:

"use strict";
var sequelize = require('./index');
var bcrypt = require('bcrypt-nodejs');

module.exports = function (sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: DataTypes.STRING,
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      validate: {
        isEmail: true
      },
      unique: {
        args: true,
        msg: 'Email address already in use!'
      }
    },
    password: DataTypes.STRING
  }, {
      classMethods: {
        generateHash: function (password) {
          return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
        },

      },
      instanceMethods: {
        validPassword: function (password) {
          return bcrypt.compareSync(password, this.password);
        },
        checkEmailExists: function (email) {
          return email == this.email
        }
      }


    });



  return User;
}

我需要检测电子邮件是否存在,因此我对电子邮件进行了自定义验证,但随后在我的路由中我有以下内容:

var express = require('express');
var User = require('../../models').User;
var router = express.Router();
var sequelize = require('../../models/index');


/* GET users listing. */
router.post('/', function (req, res, next) {

  if (JSON.stringify(req.body) == "{}") {
    return res.status(400).json({ Error: "Register request body is empty" });
  }
  if (!req.body.email || !req.body.username || !req.body.password) {
    return res.status(400).json({ Error: "Missing fields for registration" });
  }

  var password = User.generateHash(req.body.password);


  User.create({
    username: req.body.username,
    email: req.body.email,
    password: password
  }).then(function () {
    return res.status(200).json({ message: "user created" });
  }).catch(function (err) {
    return res.status(400).json({ message: "issues trying to connect to database" });
  })

});


module.exports = router;

似乎正在输入捕获,因为它检测到电子邮件已经存在,但我想显示模型内部的消息,而不是可能意味着其他内容的捕获,我如何在路由中显示它?

最佳答案

在 Angular 色模型中:

name: {
    type: DataTypes.STRING,
    validate: {
        len: [3, 5]
    }
},

然后

const {ValidationError} = require('sequelize');
async function test() {
    try {
        var item = await Role.build({code: 'SSA1', name: 'testtttt'});
        await item.validate();
         // validation passed
        await item.save(); 
        console.log('object created successfully');
    }catch (e) {
        if(e instanceof ValidationError){
            return console.error( 'Captured validation error: ', e.errors[0].message);
        }
        console.error(e);
    }
}
test();

日志:

Captured validation error: Validation len on name failed

关于javascript - 捕获sequelize模型中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966493/

相关文章:

node.js - 请求的资源上不存在 'Access-Control-Allow-Origin' header

node.js - 在 CentOS 7 上构建 npm 模块失败

node.js - Node js - SSL 例程 :SSL23_GET_SERVER_HELLO:unknown protocol:. 错误

postgresql - 在循环中通过键从 jsonb 数组中删除属性

django - Postgresql 数据库服务器不断随机关闭

postgresql - 将 byte[] PBEKeySpec 存储到 openshift 齿轮表现不同?

javascript - AngularJS:单击时如何在另一个div上显示元素

javascript - 打开下拉菜单时如何触发事件?

Javascript:对象和函数...有人可以解释为什么这不起作用吗?

javascript - 你能引用处理程序调用函数的元素吗?