首页 > 解决方案 > 如何从 OpenCPU R 函数内部设置自定义 HTTP 状态代码

问题描述

我在 OpenCPU 上有一个 R 函数(由 OpenCPU docker 映像提供:https ://hub.docker.com/r/opencpu/rstudio/ ),它按某些标准过滤数据。如果没有要返回的数据,我想发送一条带有 204 状态码的消息(无数据)。如何从 R 函数内部设置状态状态代码?

rApache 文档 ( http://rapache.net/manual.html ) 中有相关信息。据说rApache中有一个函数setStatus(),但是调用这个函数时我无法设置状态码。我试图设置 204 状态码,但我得到了一个默认(用于 POST)201 状态码。

filterData <- function(filter_a = NULL, filter_b = NULL) {

  data <- as.data.frame(
    list("a" = c(1,2,3), "b" = c(3,2,1))
  )

  if (!is.null(filter_a)) {
    data <- subset(data, a == filter_a)
  }

  if (!is.null(filter_b)) {
    data <- subset(data, b == filter_b)
  }

  if (nrow(data) == 0) {
    setStatus(204L)
    return("No content")
  } else {
    return(data)
  }
}

标签: rapacheopencpurapache

解决方案


简短的回答:这是不可能的。

设置响应状态码的逻辑封装在 openCPU 中。状态代码在res对象中进行管理。在 POST 请求的情况下,即使您设法在内部对象中设置状态码, openCPU 也会覆盖session_eval中的状态码。在执行您的自定义代码后,OpenCPU 会用 201 代码覆盖它。


推荐阅读