在保存之前使用 Sequelize Build 构建并验证模型

问题描述 投票:0回答:1

我有一种情况,我想通过 Stripe 接受付款,但首先需要验证表单输入。

一旦表单验证,在成功函数中我将调用 Stripe 并确保其正常。如果两者都好,我将处理付款,然后保存帖子。

我正在努力事先对帖子进行验证 - 请记住,我还不想保存它。

我正在使用 Express/Node.js 和 Sequelize - MySQL

 var post = Post.build({
    title: req.body.title,
    description: req.body.description,
  })

我尝试过类似的方法,但在我的控制台中它显示全红色。

post.validate().error(err => {
    console.log(err)
  })

下面这个解决方案是我在网上找到的,不起作用

//   if (errors) {
//     for (var prop in errors) {
//       console.log(prop.error)
//       if (errors.hasOwnProperty(prop)) {
//         console.log(errors[prop])
//           console.log("Errors for field " + prop + ": ");
//             // for (var i = 0; i < errors[prop].length; i++) {
//             //          errors[prop][i];
//             // }
//     }
//   }

我想立即返回所有表单错误,然后当通过时,执行我的 Stripe,然后当通过时,保存两者。

javascript mysql node.js sequelize.js
1个回答
4
投票

要使用

sequelize
验证字段并得到重大错误,说明问题出在哪里,您必须在模型定义中使用
validate: {}
属性以及要检查的规则。

关于文档:

模型验证器允许您指定格式/内容/继承 模型的每个属性的验证。验证是 自动在

create
update
save
上运行。您也可以致电
validate()
手动验证实例。

根据验证规则验证该实例的属性 在模型定义中设置。

示例:

module.exports = (sequelize, DataTypes) => {
  const test = sequelize.define(
    'test',
    {
      testDate: {
        allowNull: false,
        type: DataTypes.Date,
        defaultValue: DataTypes.NOW,
        validate: {
          isDate: true,
        },
      }
    },
    {
      freezeTableName: true,
      timestamps: false,
    }
  )
}

手动验证:

const item = await test.build(object)
const validatedItem = await item.validate()

未通过验证结果:

您可以在这里找到更多内容:

https://sequelize.org/master/class/src/model.js~Model.html#instance-method-validate https://sequelize.org/master/manual/validations-and-constraints.html

© www.soinside.com 2019 - 2024. All rights reserved.