当我们用闪亮的方式开发应用程序时,我们知道:
1 - 如果您的部件中有一个函数server
,并且该函数返回错误,则浏览器崩溃/关闭,并且用户不知道发生了什么。
2 - 例如,如果您的函数在另一个渲染函数内返回错误,则renderDataTable
该错误将显示在应用程序中,而不是显示表格。
了解了前面的两点后,我尝试将可能返回错误的函数放入渲染函数中。这样做用户可以看到错误。
例如,如果我想显示来自数据库的一些表,并且我有一个简单的查询,例如:
dbGetQuery(con,
statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)
Run Code Online (Sandbox Code Playgroud)
并且COLUMN1
不存在,那么该函数将出现错误。如果我在 中具有该函数renderDataTable
,那么用户可以看到查询出了问题。如果它就在里面,server
那么浏览器将关闭。
问题是在某些情况下我无法将查询放入renderDataTable
. 我们可以采取什么方法来显示错误并避免浏览器崩溃?
谢谢
您可以使用 捕获错误并trycatch
使用 来显示它showNotification
。我用老忠实间歇泉闪亮的例子来说明这一点,并添加到 trycatch 中,这样应用程序就不会崩溃:
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
)
server <- function(input, output) {
###
#CATCHING THE ERROR IN A NOTIFICATION
###
tryCatch({
x1 <- DBI::dbGetQuery(con,
statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con))
},
warning = function(warn){
showNotification(paste0(warn), type = 'warning')
},
error = function(err){
showNotification(paste0(err), type = 'err')
})
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)