首页 > 解决方案 > 触发 PATCH 请求的 GET 请求(快递)

问题描述

在我的快递服务器上,我有一个通过抓取来检索项目的脚本。我想偶尔触发这个脚本并将检索到的项目推送到我的数据库中。

我的第一个想法是在我的 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 })
      }
    })

标签: apiexpress

解决方案


POST 请求对于将内容上传到数据库是完全可以接受的。PATCH 通常保留用于部分更新和项目时。因此,如果您只是使用此请求更新数据库中的内容,请不要犹豫使用 PATCH。如果您要完全替换数据库中的资源(或者您需要 HTTP 请求中的整个资源,而不仅仅是修改后的内容),那么我建议您改用 PUT。

如果您将数据返回给用户,那么在这种情况下也可以接受 GET 请求。


推荐阅读