javascript - Express.js 应用程序错误 : form filed values do not persist

标签 javascript express ejs mean-stack

我正在处理 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: ''
}

The title filed should hold the value "Title"

我错过了什么?

更新:

生成的表单 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.redirectres.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/

相关文章:

javascript - 如何使用所有相对路径构建我的 Svelte 网站?

javascript - 单击 td 内的超链接时更改 td 颜色

javascript - 如何有条件地在数组中添加或删除元素

javascript - Meal.nutrition 的类型必须是 Output Type 但得到 : undefined

windows - 在 Windows 7 上启动 Node 应用程序时出现问题

logging - 如何传递连接记录器的参数?

node.js - Node : Static file caching not working due unnecessary query parameter

node.js - Node ejs forEach 导致 'Content Security Policy' 错误

json - 仅使用 EJS 遍历 json 键

javascript - 如何在 Cloud Function 中循环 Firestore 数组值