node.js - 动态构建表单并保存数据
问题描述
我的应用程序位于以 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.
}
});
});
对于常规表单,我通常会创建一个模型,并且路由将数据从表单映射到数据库文档字段名称。我如何对动态创建的表单执行此操作?
谢谢你的时间。
解决方案
我必须使架构灵活并且有效:
var siteSchema = new mongoose.Schema({
Site_Name: String
},{ strict: false });
推荐阅读
- go - 元胞自动机的观察者模式或发布/订阅模式
- javascript - 从数组中给出对象值的每个属性
- javascript - 从对象数组中删除属性,内存影响
- flutter - 为什么视频在颤动的 VideoPlayer 中不是全屏的?
- javascript - 是否可以使用 GTM 替换 dataLayer 中的增强型电子商务类别?
- python - 如何在情节主题中设置宽度和高度?
- java - 如何将 MouseListener 添加到图像并使图像在 JPanel 中移动
- qt - Qt、QML、ColorImage 不是类型
- delphi - 如何使用 TOposPosPrinter 控件打印 Code-128 条码?
- reactjs - 如何为功能组件中的每个组件创建一个计数器?