【问题标题】:How to map form fields to database object如何将表单字段映射到数据库对象
【发布时间】:2017-08-06 03:48:09
【问题描述】:

我想知道这些编辑表单是如何使用现代框架(如 express 和 mongo db)构建的。

为了澄清这个问题,我想构建一个允许编辑存储在 Mongo 中的一些对象字段的应用程序。每个“表单提交”都应该创建一个新的对象实例,只更改编辑的字段。

填充表单时,很容易检索整个对象并仅在应用程序的视图部分生成相关字段。

但是当保存表单时,要么需要再次检索对象,然后将每个表单字段“手动”映射到对象中的字段,最后将新对象保存到数据库中,要么预先存储所有字段将表单中的对象作为隐藏字段进行一些序列化。

由于这可能是一种常见的做法,而这两种方法都缺乏,我怀疑有更好的技术可用。

【问题讨论】:

    标签: html node.js mongodb forms express


    【解决方案1】:

    看看Mongoose

    Mongoose 提供了一种直接的、基于模式的解决方案来为您的应用程序数据建模。它包括内置的类型转换、验证、查询构建、业务逻辑挂钩等,开箱即用。

    您可以创建 Mongoose 模型,如下所述:http://mongoosejs.com/docs/models.html

    例如,

    var schema = new mongoose.Schema({ name: 'string', size: 'string' });
    var Shirt = mongoose.model('Shirt', schema);
    

    然后您可以通过仅提供新更新的参数来更新您的 Shirt 文档实例,如下所述:http://mongoosejs.com/docs/api.html#model_Model.update

    例如,

    Shirt.update({ name: 'New Name' }, { size: 'small' }, 
      function (err, raw) { 
        if (err) return handleError(err);
        console.log('The raw response from Mongo was ', raw);
      }
    );
    

    【讨论】:

      【解决方案2】:

      您可以向仅发送几个字段的 Mongo 发送“稀疏”更新;您无需重新保存整个文档。为此,您需要跟踪哪些字段已更改;也称为“脏”字段。

      这在使用 express 的传统请求-响应往返过程中有些困难,因为一切都是无状态的。

      一种解决方案是编写一个小型前端脚本,该脚本监听表单字段的更改并将这些字段名称的列表保存到<input type="hidden">。然后在您的快速应用程序中,检查该隐藏字段。如果存在,则只处理那些字段。如果不存在,请重新保存整个文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多