猫鼬,ExpressJs-公开mongo文档

时间:2018-07-13 15:26:12

标签: node.js rest express mongoose

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

// 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对象,使其仅返回所需的数据,并从响应中省略了诸如version字段之类的内容。

答案 1 :(得分:0)

我认为这是一个很好的问题,即使范围很广。在Node / Express之上构建了许多框架(例如LoopBack),它们充当数据层和HTTP层(REST,API,无论您要调用什么)之间的粘合剂,您想要在给定端点上实际存在的内容。如果您还有其他具体问题,很高兴在这里分享其他想法。

您还可以保持精简并覆盖Mongoose对象的toJSON方法(有关示例,请参见this)。这可能与您的示例一致,该示例具有在您的对象交付给最终用户之前该对象将要遵循的其他类,但是就我个人而言,我更希望将其保留在我的对象定义(猫鼬模型文件)中。

最后,我想这是一个问题,即您需要多少控制权,该项目将要进行多大规模以及将来的需求是什么。对于微服务,您可能会发现Express +猫鼬和一些特定策略可以解决您的问题。