我正在处理 blogging application (单击链接查看 GitHub 存储库)和 Express , EJS和 MongoDB。
当然有一个“添加新帖子”表格,带有 addPost()
Controller 中的方法;
exports.addPost = (req, res, next) => {
const errors = validationResult(req);
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
console.log(post);
if (!errors.isEmpty()) {
req.flash('danger', errors.array());
req.session.save(() => res.render('admin/addpost', {
layout: 'admin/layout',
website_name: 'MEAN Blog',
page_heading: 'Dashboard',
page_subheading: 'Add New Post',
post: post
}));
} else {
post.save(function(err) {
if (err) {
console.log(err);
return;
} else {
req.flash('success', "The post was successfully added");
req.session.save(() => res.redirect('/dashboard'));
}
});
}
}
表单 View :
<form action="./post/add" method="POST" class="mb-0">
<div class="form-group">
<input type="text" class="form-control" name="title" value="<%= req.body.title %>" placeholder="Title" />
</div>
<div class="form-group">
<input type="text" class="form-control" name="excerpt" value="<%= req.body.excerpt %>" placeholder="Excerpt" />
</div>
<div class="form-group">
<textarea rows="5" class="form-control" name="body" placeholder="Full text">
<%= req.body.title%>
</textarea>
</div>
<div class="form-group mb-0">
<input type="submit" value="Add Post" class="btn btn-block btn-md btn-success">
</div>
</form>
假设一些必需的表单字段已归档,但不是全部。
表单 View 再次呈现,并带有空的必填字段的错误消息。但是不为空的必填字段应保留其数据。但他们没有。
使用此语法也不起作用
<input type="text" class="form-control" name="title" value="<%= post.title %>" placeholder="Title" />
即使行 console.log(post)
在控制台中显示这个,果然 :{
updated_at: 2020-03-18T10:49:17.199Z,
created_at: 2020-03-18T10:49:17.199Z,
_id: 5e71fcbe7fafe637d8a2c831,
title: 'My Great Post',
short_description: '',
full_text: ''
}
我错过了什么?
更新:
生成的表单 HTML:
<form action="./post/add" method="POST" class="mb-0">
<div class="form-group">
<input type="text" class="form-control" name="title" value="" placeholder="Title">
</div>
<div class="form-group">
<input type="text" class="form-control" name="excerpt" value="" placeholder="Excerpt">
</div>
<div class="form-group">
<textarea rows="5" class="form-control" name="body" placeholder="Full text"></textarea>
</div>
<div class="form-group mb-0">
<input type="submit" value="Add Post" class="btn btn-block btn-md btn-success">
</div>
</form>
最佳答案
您需要在 Controller 和 View 上更改的东西很少,我在下面提到了这两个更改
在您的 Controller 上
exports.addPost = (req, res, next) => {
var form = {
titleholder: req.body.title,
excerptholder : req.body.excerpt,
bodyholder: req.body.body
};
const errors = validationResult(req);
if (!errors.isEmpty()) {
req.flash('danger', errors.array())
//req.session.save(() => res.redirect('../addpost'));
res.render('admin/addpost',{
layout: 'admin/layout',
website_name: 'MEAN Blog',
page_heading: 'Dashboard',
page_subheading: 'Add New Post',
form:form});
} else {
else 之后的代码与您已有的相同,我添加了
form
对象并更改了您的 res.redirect
至res.render
这将是您 View 的代码
<div class="col-sm-7 col-md-8 col-lg-9">
<div class="card">
<div class="card-header d-flex px-2">
<h6 class="m-0"><%= page_subheading %></h6>
</div>
<div class="card-body p-2">
<form action="./post/add" method="POST" class="mb-0">
<div class="form-group">
<input type="text" class="form-control" name="title" value="<%= typeof form!='undefined' ? form.titleholder : '' %>" placeholder="Title" />
</div>
<div class="form-group">
<input type="text" class="form-control" name="excerpt" value="<%= typeof form!='undefined' ? form.excerptholder : '' %>" placeholder="Excerpt" />
</div>
<div class="form-group">
<textarea rows="5" class="form-control" name="body" placeholder="Full text"><%= typeof form!='undefined' ? form.bodyholder : '' %></textarea>
</div>
<div class="form-group mb-0">
<input type="submit" value="Add Post" class="btn btn-block btn-md btn-success">
</div>
</form>
</div>
</div>
</div>
value
的值属性变了。我还为您的 github 项目创建了一个拉取请求。
关于javascript - Express.js 应用程序错误 : form filed values do not persist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60721476/