【问题标题】:Mongoose, ExpressJs - exposing mongo documentsMongoose,ExpressJs - 暴露 mongo 文档
【发布时间】:2018-12-22 00:41:59
【问题描述】:

每个使用 expressjs 和 mongoose 的例子都是这样的:

const contentTypes = await ContentType.find().sort({createdAt: -1});
res.json(contentTypes);

但在这种情况下,我们通过 REST api 返回所有文档(甚至是猫鼬版本字段 '_v'。我认为这样描述接口是很好的做法

export class ContentTypeEntry {
  id: string;
  name: string;
}

并将 mongoose 类型转换为此接口对象并返回此 DTO。我刚开始使用nodejs生态系统,所以也许在这个生态系统中直接返回ORM对象是正常的?

您如何处理月光对象和 REST 端点?

【问题讨论】:

    标签: node.js rest express mongoose


    【解决方案1】:

    我认为这是一个很好的问题,即使它有点宽泛。有许多构建在 Node/Express 之上的框架(例如,LoopBack)充当数据层和 HTTP 层(REST、API,无论你想怎么称呼它)之间的粘合剂,决定你做什么希望实际存在于给定的端点。如果您有更具体的问题,很高兴在这里分享其他想法。

    您还可以保持相当精简并覆盖 Mongoose 对象的 toJSON 方法(参见 this 示例)。这可能与您的示例一致,即您的对象在交付给最终用户之前将符合该附加类,但我个人更愿意将其保留在我的对象定义(Mongoose 模型文件)中。

    我想归根结底,问题在于您需要多少控制权、项目的规模以及未来的需求。对于微服务,您可能会发现 Express + Mongoose 和一些具体的策略可以解决您的顾虑。

    【讨论】:

      【解决方案2】:

      我不完全确定我的问题是否正确,但这就是我的响应对象的样子 -

      // GET /api/products/1010
      
      {
          "meta": {
              "type": "success",
              "code": 200,
              "message": "Retrieved product number 1010"
          },
      
          "data": {
              "id": 1010,
              "name": "Apple iPhone X",
              "description: "Yada yada",
              "price": 1000
          }
      }
      

      这只是将元数据和实际返回的数据分开,以便使用 api 的人更容易更好地处理错误。我还修改了 JSON 对象以仅返回所需的数据并从响应中省略诸如版本字段之类的内容。

      【讨论】:

        猜你喜欢
        • 2017-08-23
        • 1970-01-01
        • 2017-01-28
        • 2018-06-19
        • 2021-09-05
        • 2014-11-20
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多