【发布时间】:2020-01-07 05:09:44
【问题描述】:
在我的快递服务器上,我有一个通过抓取来检索项目的脚本。我想偶尔触发这个脚本并将检索到的项目推送到我的数据库中。
我的第一个想法是在我的 API 中创建一个端点(例如 /api/scrape-items)。问题是它将是一个 GET 请求,负责运行脚本、检索项目和修补项目(更新)我的数据库。让 GET 请求完成所有这些似乎并不正确,尤其是发出 PATCH 请求,但我也无法将 GET 请求更改为 POST 请求,因为我没有正文。
有人可以帮我想出更好的方法吗?谢谢!
更新:触发端点示例:
router.get('/scrape-items/', async (req, res) => {
try {
const resultFromScraping = await [
{ id: 1, data: 'updated data' },
{ id: 2, data: 'updated data' }
]
await Promise.all(
resultFromScraping.map(
async item =>
await axios.patch(
`/api/items/${item.id}`,
item.data
)
)
)
} catch (err) {
res.status(500).json({ message: err.message })
}
})
【问题讨论】:
-
发布请求不需要正文
-
@NicholasSiegmundt 我实际上正在使用补丁,它只适用于帖子吗?您认为后端点检索外部内容并更新数据库是否可以?它也适用于补丁吗?
-
补丁通常用于部分更新资源。 Post 对于获取信息并将其添加到数据库中是完全可以接受的。如果您将信息返回给用户,我会说 Get 甚至是可以接受的。
-
@MattiaRasulo 会做的
-
为什么不重构你的代码,让请求逻辑和爬取逻辑分离,然后使用合适的cronjob来执行爬取部分?