MEAN Stack中的动态HTML表单生成

11

我刚开始学习 MEAN 技术栈,并需要动态生成表单。

要求导入文档(excel/csv/xml/xls 等),并使用它来生成动态表单,以便用户可以更新其数据,然后再将其导出到相应的文件中。

因此,我正在将文档转换为 JSON 格式,并将 JSON 数据存储到 MongoDB 数据库中。

例如:考虑这个xlsx数据:

ID  Name       dob        Gender
1   user1      7-Dec-87   m
2   user2      8-Dec-87   f
3   user3      9-Dec-87   f
3   user4      4-Dec-87   m

我正在使用 xlsx-to-json 模块将其转换为 JSON 格式并将其存储到 Mongodb 中。

app.post('/myapp', function (req, res) {

    //console.log("===========" + req.file.path);

    converter({
        input: req.file.path,
        output: "output.json"
    }, function (err, result) {
        if (err) {
            console.error(err);
        } else {
            console.log(result);
            db.collection('test').insert(result, function (err, doc) {
                console.log(err);
                res.json(doc);
            });
        }
    });

});

我正在从Mongodb和express.js中获取上述数据。

app.get('/myapp', function (req, res) {
    db.collection('test').find(function (err, docs) {
        console.log(docs);
        res.json(docs);
    });
});

app.get('/birthdaylist/:id', function (req, res) {
    var id = req.params.id;
    console.log(id);
    db.collection('test').findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
        console.log(JSON.stringify(doc));
        res.json(doc);
    });
});

这里是JSON输出:

[ 
  { dob: '7-Dec-87', ID: '1', Name: 'user1' },
  { dob: '8-Dec-87', ID: '2', Name: 'user2' },
  { dob: '9-Dec-87', ID: '3', Name: 'user3' },
  { dob: '4-Dec-87', ID: '4', Name: 'user4' } 
]

所以,我有一些问题:

  • 我正在使用正确的方法从xlsx/csv等生成动态表单吗?如果是,那么如何从上述JSON生成动态表单。

  • 在谷歌上探索时,我发现mongodb可以自动生成表单(https://github.com/GothAck/forms-mongoose),那么它是否有帮助,因为excel文件中可能存在大量数据。

真的很感激任何帮助。


以上代码看起来很适合转换,特别是考虑到您的输出结果看起来不错。如果没有前端代码的尝试,SO(Stack Overflow)不能提供太多帮助。您包含的 github 链接是针对 Mongoose 的,因此,除非您正在使用 Mongoose,否则它不会对您有太大帮助。 - metame
关于MongoDB的一个小提示:你实际上并不是在Mongo中存储JSON,而是BSON - metame
@metame:感谢您的回复。我尝试了moogose,但它需要JSON格式中的正确属性。在我的情况下,JSON是从Excel文件生成的,那么我该如何解决这个问题呢? - J.K.A.
@metame:哦,原来是BSON。实际上我正在使用mongojs节点模块来插入数据。 - J.K.A.
那听起来像是另一个更清晰的问题。我建议将其作为一个单独的问题发布或编辑您的问题(和标题)以提出该问题。按照您当前问题的陈述方式,一个适当的答案需要有人为您编写一堆代码。 - metame
显示剩余2条评论
2个回答

4
您是要分析任意电子表格并动态提取模式,还是已经预先知道模式? 如果您知道模式,则 Mongoose 表单生成示例很简单。 但请确保这确实是一个要求,因为这很困难。
由于电子表格是由用户创建的,因此您永远无法完全确定。 但您可以制作出大部分时间运行良好的东西。
您需要的是一些东西,它可以接受 JSON 对象并提取模式,并将其放入 Mongoose 模式格式中。
所以您想要为 Mongoose 模式添加一个有趣的模块。我在node-modules.com 上搜索,找到了这个链接:https://github.com/Nijikokun/generate-schema

是的,你说得对,电子表格是由用户创建的,他们会做一些奇怪的事情,这就是为什么我想将其转换为JSON格式的原因。 - J.K.A.
好的,那么请查看答案的其余部分。您能否查看generate-schema或node-modules.com中的其他模块是否可以从JSON中获取模式? - Jason Livesay
是的..我会检查并告诉您。谢谢。 - J.K.A.
var schema = GenerateSchema.mongoose('Product', JSON.stringify(doc)); 输出结果为:{"_id":"56d98dc1c6ca1fb0140d8e05","Birthday":"7-Dec-87","ID":"1","Name":"user1"} - J.K.A.
我做了类似于以下的事情 var schema = GenerateSchema.json('Product', JSON.stringify(doc)); var monschema = GenerateSchema.json('Product', schema); console.log(monschema);,输出结果如下: { '$schema': 'http://json-schema.org/draft-04/schema#', title: 'Product', type: 'object', properties: { '$schema': { type: 'string' }, title: { type: 'string' }, type: { type: 'string' } } } - J.K.A.
显示剩余4条评论

4

首先,我需要定义模式以生成HTML表单,但在我的情况下,数据来自Excel(动态生成),可以是任何内容。那么我该如何为其定义模式。例如:[ { dob: '7-Dec-87', ID: '1', Name: 'user1' }, { dob: '8-Dec-87', ID: '2', Name: 'user2' }, { dob: '9-Dec-87', ID: '3', Name: 'user3' }, { dob: '4-Dec-87', ID: '4', Name: 'user4' } ], [ { dob: '7-Dec-87', ID: '1', Name: 'user1' }, { dob: '8-Dec-87', ID: '2', Name: 'user2' }, { dob: '9-Dec-87', ID: '3', Name: 'user3' }, { dob: '4-Dec-87', ID: '4', Name: 'user4' } ] - J.K.A.
你已经将Excel文件转换为JSON格式,现在你只需要将JSON转换为JSON模式(或手动创建JSON模式)。这个工具可以帮助你入门:http://jsonschema.net/#/ - Trevor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接