如何使用NodeJS,Express和Mongoose创建动态表单?
现在我的内容是为了这个问题而硬编码的。
这就是我的页面创建方式:
app.post('/create', function(req, res) {
var page;
var b = req.body;
page = new Page({
title: b.title,
url: '/' + Func.stringToUrlSlug(b.title) + '/',
headline: b.headline,
contents: [{
body: b.content1_body,
class: 'CLASS1'
},{
body: b.content2_body,
class: 'CLASS2'
},{
body: b.content3_body,
class: 'CLASS3'
}],
border: b.border,
target: b.target,
hidden: b.hidden,
externUrl: b.externUrl,
order: 700
});
page.save(function(err, page) {
if (!err)
res.send(page);
else
res.send(err);
});
});
我的玉石前端创作:
....
div
label Content
textarea(name='content1_body')
div
label Content
textarea(name='content2_body')
div
label Content
textarea(name='content3_body')
....
我的mongoose架构内容属于Array类型。
我的问题是:我如何根据我添加的额外内容字段,使这些文档在我的路线中保持动态?
我是否需要以某种方式在页面数组中推送这些额外的字段?
说某些事情是不清楚的。提前谢谢。
答案 0 :(得分:1)
如何实现“动态表单”有多种方法。最简单的方法是使用单页应用程序功能,当您在表单之间移动时,根本不加载页面。结果可以存储在document.localStorage中,当用户完成将结果发送到服务器时。
当您不使用客户端可能性时,您必须将每个表单结果存储在临时数据库“table / document”中,您还必须跟踪用户的形式。当用户到达结束时,将之前步骤中的所有数据插入表/文档。
答案 1 :(得分:1)
好了很多尝试后我自己解决了。
我最终以这种方式创建了表单元素:
div
label Class
input(name='content[1][class]')
label Content
textarea(name='content[1][body]')
div
label Class
input(name='content[2][class]')
label Content
textarea(name='content[2][body]')
....
这样我就能到达内容领域,无论是阶级还是身体领域。我最终将这些推入我的页面数组:
b.content.forEach(function(item) {
page.contents.push({ class: item.class, body: item.body });
});
我最终用jQuery添加了更多表单字段。
答案 2 :(得分:0)
var app = express();
...
app.use(bodyParser.urlencoded({ extended: true }));
Express将使用qs库。该库具有自动解析功能,可将查询参数转换为数组或对象。
示例(来源:qs docs)
var withIndexes = qs.parse('a[1]=c&a[0]=b');
assert.deepEqual(withIndexes, { a: ['b', 'c'] });
正确解析输入后,将此信息发送给猫鼬是个问题。