我正在尝试执行以下路由:
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<perspectiveID>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}
该api
应该以可选的sn
值接收请求。但是,这不起作用。 sn
值可能存在或可能不存在,并且基于该值运行查询。但是当我运行它时,我不断收到此错误:
call: http://localhost:3982/outcomes-aggregated/1/342342
0 "404 - Resource Not Found"
只有在我还包含sn
的情况下,它才有效。
call: http://localhost:3982/outcomes-aggregated/1/342342/NULL
如何使此参数可选?还是我必须创建另一个没有该值的函数?
更新
我更新了路由和逻辑以尝试解决此问题。
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
if(missing(sn) || pracma::strcmp(sn, "NULL")){
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "'")
} else{
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "' and sn = '", sn , "'")
}
...
}
目前该方法有效,但是我仍然必须在网址中添加NULL
。我很想听听这样做的更好方法。
答案 0 :(得分:1)
您的路径有3个参数,您只提供2个。当您提供第三个参数时,它可以工作,但未映射到sn。它已映射到PerspectiveID。
/ outcomes-aggregate / categoryId:int //
答案 1 :(得分:0)
基于@BrunoTremblay的响应,我最终将函数转换为使用查询而不是路径。效果很好。
新功能如下:
#* @get /outcomes-aggregate <-- remove the path
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}