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

3
我有一个情况,想通过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操作,再通过验证后保存两者。请保留所有HTML标签。
1个回答

4
要使用sequelize对字段进行验证并获得指示错误发生位置的信息,您需要在模型定义中使用validate: {}属性以及您想要检查的规则。根据文档所述,模型验证器允许为模型的每个属性指定格式/内容/继承验证。验证会自动在createupdatesave上运行。您还可以调用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()

如果未通过验证,结果如下:

enter image description here

更多信息请参考以下链接:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接