我想写一个闪亮的应用程序。这个闪亮的应用程序将用于其他应用程序(父应用程序)的分析。
我的父应用程序必须调用这个闪亮的应用程序。我想确保单独从这个父应用程序调用我的闪亮应用程序。即不应使用其URL直接调用它。
为此,我正在考虑传递一个键以及闪亮的URL。在闪亮的应用程序中,我需要进行REST调用以验证密钥。如果来自我的父应用程序,此密钥将有效。如果密钥无效,我需要阻止执行闪亮的应用程序。
因此,作为第一步,我尝试检查是否停止/阻止闪亮的app,如果参数不存在。
我可以使用session$clientData读取http查询参数。
我尝试使用validation
进行屏蔽这是我的服务器.R
shinyServer(function(input, output, session) {
output$data <- reactive({
query <- parseQueryString(session$clientData$url_search)
validate(
need(exists("query$foo"), "Please provide parameter 'foo'")
)
query
})
# Return the components of the URL in a string:
output$urlText <- renderText({
paste(sep = "",
"protocol: ", session$clientData$url_protocol, "\n",
"hostname: ", session$clientData$url_hostname, "\n",
"pathname: ", session$clientData$url_pathname, "\n",
"port: ", session$clientData$url_port, "\n",
"search: ", session$clientData$url_search, "\n"
)
})
})
这是我的ui.R
shinyUI(bootstrapPage(
h3("URL components"),
verbatimTextOutput("urlText"),
h3("Parsed query string"),
verbatimTextOutput("data")
))
从代码中可以看出,如果未传递查询参数 foo ,将显示“请提供参数'foo'”。但还有其他细节。我只想显示一个只有这个警告的页面。我怎么能这样做?
由于我是R和闪亮的应用程序的新手,我不确定我的方法是否正确?
答案 0 :(得分:3)
您可以尝试使用renderUI
和uiOutput
仅在传递查询参数时显示应用的其余部分。
以下是一个例子:
<强> server.R 强>
shinyServer(function(input, output, session) {
output$shiny_app <- renderUI({
#check if foo was passed, if it is add the UI elements
query <- parseQueryString(session$clientData$url_search)
validate(need(!is.null(query$foo), "Please provide parameter 'foo'"))
plotOutput("plot")
})
#this output will only show if the plotOutput is passed by the previous function
output$plot <- renderPlot({
x <- rnorm(10)
y <- rnorm(10)
plot(x, y)
})
})
<强> ui.R 强>
shinyUI(bootstrapPage(
uiOutput("shiny_app")
)
)