NodeJS:dynamic表单

如何使用NodeJS,Express和Mongoose创builddynamic表单?

现在我的内容为了这个问题而被硬编码。

这是我的网页创build的样子:

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); }); }); 

而我的Jade前端创作:

 .... div label Content textarea(name='content1_body') div label Content textarea(name='content2_body') div label Content textarea(name='content3_body') .... 

我的mongoose模式内容是数组types。

我的问题是:我怎样才能让这些文件在我的路线上dynamic取决于我添加了多less额外的内容字段?

我是否需要以某种方式在页面数组内部推送这些额外的字段?

说如果有什么不清楚的。 提前致谢。

如何实现“dynamic表单”有多种方法。 最简单的方法是使用单页应用程序function,当您在窗体之间移动时,根本不会加载页面。 结果可以存储在document.localStorage中,当用户完成后将结果发送给服务器。

当你不使用客户端的可能性,你必须将每个表单结果存储在临时数据库“表/文档”,也必须跟踪用户是什么forms。 当用户到达末尾时,将前面步骤中的所有数据插入到表格/文档中。

好了很多尝试之后我自己解决了。

我结束了创build我的表单元素应该是这样的dynamic:

  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]') .... 

这样我可以达到内容领域,这是class级还是身体领域。 最后我把这些推入到我的页面数组中:

 b.content.forEach(function(item) { page.contents.push({ class: item.class, body: item.body }); }); 

我最终用jQuery添加了更多的表单域。

如果启用Express身体分析器的扩展分析

 var app = express(); ... app.use(bodyParser.urlencoded({ extended: true })); 

Express将使用qs库。 该库具有自动分析function,可将查询参数转换为数组或对象。

示例(来源:qs文档)

 var withIndexes = qs.parse('a[1]=c&a[0]=b'); assert.deepEqual(withIndexes, { a: ['b', 'c'] }); 

正确parsing你的input后,把这个信息发送到mongoose的问题。