gpt4 book ai didi

node.js - Rest API Node Js & Express,创建指向自身的链接(href)

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:01 24 4
gpt4 key购买 nike

目前我正在 Node JS 和 Express 中开发 REST API。我必须为 API 中的每个资源创建一个链接,如下例所示。

 {
"id": "20281",
"title": "test",
"body": "test",
"date": "2017-11-14 09:01:35",
"_links": {
"self": {
"href": "href"
},
"collection": {
"href": "href"
}
}
},

我知道我可以在 Controller 中处理这个问题,因为 req 对象可用。但最好在我的模型中创建一个虚拟字段来动态创建链接而不是将其保存在数据库中。

最好的方法是什么?

数据库:MongoDBODM: Mongoose

最佳答案

有很多方法可以做到这一点,并且您没有描述您的 DB 或 ORM 等,但暗示您有一些与您的术语类似的东西。

最简单的做法是假设这不是存储的问题,而是您将其全局应用到 api,以便所有路由都应用它。这可以采用中间件的形式:

router.use((req, res, next) => {
if (res.data) { // if you do it this way, none of your routes will actually do a res.send, but instead will put their data into res.data and rely on another middleware to render or send it
res.data._links = {
self: calculateSelf(req, res.data),
collection: calculateCollection(req, res.data)
};
}
});
鉴于此,这两个链接计算器可以使用一些标准模式或正则表达式来计算链接的一般外观。

或者,如果您使用 Mongoose,您可以重写 toJSON 以填充您希望发送的任何模型中的这些链接,但这意味着您的模型应该知道根应用程序 URL 是什么,我不建议这样做。

虚拟字段实现:

YourSchema.virtual('links').get(() => {
return {
self: 'http://example.com/api/v1.0/schema/' + this._id,
collection: 'http://example.com/api/v1.0/schema/'
};
});

要使其工作,您必须将 { virtuals: true } 传递给 toObject()toJSON() 或将其设置为全局 mongoose 配置以始终显示 virtuals。不过,正如我之前所说,我真的不建议这样做,因为它需要架构能够访问和了解基本 URL,而基本 URL 可能会在环境之间发生变化。如果(正如您的架构所暗示的那样)模型代表一个网页,那么 URL 模板可能实际上与模型相关,但在大多数领域中情况并非如此,因此我建议使用中间件方法。

关于node.js - Rest API Node Js & Express,创建指向自身的链接(href),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com