我正在尝试构建我的第一个Shiny应用。
我有一个用户定义的函数,该函数需要生成加密密钥。我想将其添加到Shiny应用程序中。
我尝试了如下。 UI的第一部分的工作原理是要求输入用户名的文本(应将其用于标记输出文件)-并且我设法获得了一个操作按钮,用户可以单击该按钮以理论上运行代码制作加密密钥。
const appendData = (newValue) => {
return new Promise(function(resolve, reject){
const request = indexedDB.open("todos");
request.onsuccess = (e) => {
const db = e.target.result;
const trans = db.transaction(["data"],"readwrite");
const store = trans.objectStore("data");
const openCursorReq = store.openCursor(IDBKeyRange.only(newValue.name));
openCursorReq.onsuccess = (event) => {
const cursor = event.target.result;
let oldValue = cursor.value;
oldValue.value = oldValue.value.concat(newValue.value);
var updateRequest = cursor.update(oldValue);
updateRequest.onerror = updateRequest.onblocked = () => {
console.log('Error updating');
reject();
};
updateRequest.onsuccess = function (event) {
console.log('update', newValue);
resolve();
};
trans.oncomplete = function(e) {
db.close();
};
}
};
request.onerror = reject;
})
};
我觉得在mainPanel中应该有一些东西可以为输出的密钥文件提供链接,或者可以自动下载它们吗?
然后在服务器部分I 1)以sys-date-time为种子 2)输入名称(如上所述)并将其链接到sys-date以为最终密钥创建文件名 3)然后定义我的函数(create.key.pair) -这需要sys-date-time(在上面的1中设置),并使用它和openSSL生成公共和私有密钥。它将使用在第2点输入的名称来标记这些文件(该名称应从闪亮应用程序中UI的侧边栏部分输入)
library(shiny)
# Define UI for ODK Encryption app ----
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Make ODK Encryption Keys"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
textInput("name",
"Enter your name:"),
actionButton(inputId = "input_action", label = "Generate Keys")
),
mainPanel(
)
)
)
我需要一些有关是否 A)我需要在mainPanel中添加一些内容以显示/下载输出的文件 B)服务器部分中的代码应该可以工作
我目前无法确定我的错误是在A还是B中,是因为它不会生成密钥(而我的R脚本版本可以正常工作)
首次使用Shiny,因此所有帮助均深表感谢。
答案 0 :(得分:1)
如果我修复了一些小错误,它会像通常的R脚本一样以闪亮的方式工作:
app.render(req, res, '/posts', { cat: req.params.cat, color: req.params.color })
和input$input_action
input$name
添加到您的函数中此外,请勿在{{1}}中加载函数,因为这会导致您的应用在每次有人点击key_name
时重新加载该函数。您可以改为在应用启动之前将其加载一次。
您的代码是:
observeEvent