首页 > 解决方案 > 动态构建表单并保存数据

问题描述

我的应用程序位于以 Express 和 MongoDB 作为后端的 Node.js 上。

场景是允许管理员用户构建自己的表单,其他用户可以在该表单上输入数据。

最初,管理员用户构建表单信息。完成后,这就是数据库文档添加后的外观。它包含有关该字段的信息。

/* 1 */
{
    "_id" : ObjectId("5d41a74f97941b2ff85c5e54"),
    "fieldname" : "Site Name",
    "fieldtype" : "String",
    "fieldinputtype" : "TextBox",
    "sitecatname" : "General",
    "fieldorder" : 10,
    "__v" : 0
}
/* 2 */
{
    "_id" : ObjectId("5d41a7e597941b2ff85c5e55"),
    "fieldname" : "Site Description",
    "fieldtype" : "String",
    "fieldinputtype" : "TextBox",
    "sitecatname" : "General",
    "fieldorder" : 20,
    "__v" : 0
}

基于此,我能够绘制表格。看看我如何将表单字段名称生成为数组。

        <form action="/adminsiteconfig" method="POST">
            <div class="container">
                <% sitecats.forEach(function(catitem) {%>
                    <h2><%= catitem.sitecatname %> - <%= catitem.sitecatorder %> </h2>
                    <div class="container">
                            <% siteadmin.forEach(function(fielditem){ 
                                if (fielditem.sitecatname == catitem.sitecatname ) { %>
                                <div class="row">
                                    <div class="col-md-3 col-lg-3">
                                        <h6><%= fielditem.fieldname %>:</h6> 
                                    </div> 
                                    <div class="col-md-3 col-lg-6">
                                        <% if (fielditem.fieldinputtype === "Text box") { %>
                                            <input class="admstudyinput" type="text" name="site[<%= fielditem.fieldname %>]" placeholder="<%= fielditem.fieldname %>">
                                        <% } %>
                                    </div>
                                </div>
                                <hr>
                                <% } %>
                            <% }); %>
                    </div>
                 <% });%>
            </div>
            <button class="btn btn-lg btn-block btn-dark" type="submit">ADD</button>
        </form>

它必须通过以下模型将其保存到数据库中。

var mongoose = require("mongoose");

var siteSchema = new mongoose.Schema({
    site_name:  String
});

module.exports = mongoose.model("site", siteSchema);

这是我的发帖路线

router.post("/adminsiteconfig", middleware.isLoggedin, function(req, res){
   //create a new studycategory and save it to the database.
    site.create(req.body.site, function(err,newsite){
        if(err){
            console.log(err);
            res.redirect("/adminsiteconfig");
        } else {
            console.log(newsite);
            res.redirect("/adminsiteconfig"); //redirects to GET route.
        }
    });
});

对于常规表单,我通常会创建一个模型,并且路由将数据从表单映射到数据库文档字段名称。我如何对动态创建的表单执行此操作?

谢谢你的时间。

标签: node.jsmongodbexpress

解决方案


我必须使架构灵活并且有效:

var siteSchema = new mongoose.Schema({
    Site_Name:  String
},{ strict: false });


推荐阅读