在Sequelize验证错误后无法更新记录

时间:2017-12-10 01:32:19

标签: javascript node.js express sequelize.js

我正在使用Node / JS / Express / Sqlite中的项目遇到一个奇怪的错误。我可以成功检索用户的详细信息,并提供HTML表单,提供编辑详细信息的功能。这些字段是必填字段,在我的模型中定义如下(first_name作为示例):

first_name: {
      type: DataTypes.STRING,
      validate: {
        notEmpty: {
          msg: 'A first name is required'
        }
      }

现在,如果我使用文本编辑现有字段并提交表单,则数据会正确更新。

如果我从表单上的输入框中删除文本并提交,则会触发续集验证错误并显示错误文本。到目前为止工作正常。

但是,如果我使用新文本(与前一个值不同)替换上一步中的空文本,则表单会提交,但此字段的值将恢复为原始值。这将发生在用户的任何字段中。

以下是我的UPDATE路线的示例。如果需要更多代码,请告诉我。

/* POST Update Patron */
router.post("/details/:id", function(req, res, next){
  Patron.update(req.body, {
    where: [{
      id: req.params.id
    }]
  })
  .then(patron=>{
    res.redirect("/patrons");
  })
  .catch(function(error){
      if(error.name === "SequelizeValidationError") {
      const patron = Patron.build(req.body);
      const loans = Loan.findAll({where: {patron_id: req.params.id}, include: [{ model: Patron}, {model: Book}]});
      Promise.all([patron, loans]).then(function(data){
        res.render("patron_detail", {patron: data[0], loans: data[1], errors: error.errors})
      })
    } else {
      throw error;
    }
    }).catch(function(error){
        res.send(500, error);
    });
  });

这是我的用户(赞助人)的PUG / HTML表格:

extends layout

block content
  h1 Patron: #{patron.first_name} #{patron.last_name}

  include error

  form(action='/patrons/details/' + patron.id, method="post")
    P 
      label(for='first_name') First name:
      input(id='first_name' name='first_name' type='text' value=patron.first_name)
    p
      label(for='last_name') Last Name:
      input(id='last_name' name='last_name' type='text' value=patron.last_name)
    p
      label(for='address') Address:
      input(id='address' name='address' type='text' value=patron.address)
    p
      label(for='email') Email:
      input(id='email' name='email' type='text' value=patron.email)
    p
      label(for='library_id') Library ID:
      input(id='libary_id' name='library_id' type='text' value=patron.library_id)
    p
      label(for='zip_code') Zip Code:
      input(id='zip_code' name='zip_code' type='text' value=patron.zip_code)
    p
      input(type='submit', value='Update')

  h2 Loan History
  table
   thead
    tr
      th Book
      th Patron
      th Loaned On
      th Return By
      th Returned On
      th Action

    tbody
      if loans.length > 0
        each loan in loans
          tr
            td
              a(href='/books/details/' + loan.Book.id) #{loan.Book.title}
            td
              a(href='/patrons/details/' + loan.Patron.id) #{loan.Patron.first_name} #{loan.Patron.last_name}
            td= loan.loaned_on
            td= loan.return_by
            td= loan.returned_on
            if(!loan.returned_on)
              td
                a.button(href=`/loans/${loan.id}/return`) Return Book
      else
        tr
          td No Loans

0 个答案:

没有答案