我正在使用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