From f54db6a1e757c601c7a1212e23d0e67eb539a00e Mon Sep 17 00:00:00 2001 From: LeafYeeXYZ Date: Tue, 3 Dec 2024 10:23:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(server):=20=E6=94=AF=E6=8C=81=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++--- server/api.R | 2 +- server/test.ts | 29 ----------------------------- 3 files changed, 6 insertions(+), 33 deletions(-) delete mode 100644 server/test.ts diff --git a/README.md b/README.md index edb8061..8d8542c 100644 --- a/README.md +++ b/README.md @@ -532,11 +532,13 @@ tailwind.css # 全局样式 # 进入服务端目录 cd ./server # 构建镜像 -docker build -t psych-pen-api . +docker build -t psych-pen-api . # 构建为当前架构的镜像 +docker build --platform linux/arm64 -t psych-pen-api . # 构建为 linux/arm64 架构的镜像 +docker build --platform linux/amd64 -t psych-pen-api . # 构建为 linux/amd64 架构的镜像 # 运行容器 -docker run -d -p 8000:8000 psych-pen-api +docker run -d -p 8000:8000 -e PSYCH_PEN_API_PASSWORD=xxx psych-pen-api # 密码默认为 psychpen # 访问接口 -curl http://localhost:8000/execute -X POST -d '{"password": "123456", "code": "1 + 1"}' +curl http://localhost:8000/execute -X POST -d '{"password": "xxx", "code": "1 + 1"}' ``` > 目前, 如果需要使用服务端功能, 请手动在本地运行服务器, 并在前端手动设置服务器地址和密码; 并请注意, `Safari` 浏览器可能会阻止 `localhost` 的请求, 请使用 `Chrome` 浏览器; 如果您熟悉 `R` 而不熟悉 `Docker`, 也可以用 `plumber` 直接运行 `api.R` 文件 diff --git a/server/api.R b/server/api.R index deb477a..075db79 100644 --- a/server/api.R +++ b/server/api.R @@ -1,6 +1,6 @@ library(plumber) -global_password <- "123456" +global_password <- Sys.getenv("PSYCH_PEN_API_PASSWORD", "psychpen") # 配置中间件来添加CORS支持 #* @filter cors diff --git a/server/test.ts b/server/test.ts deleted file mode 100644 index 5c6bce6..0000000 --- a/server/test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - loadRPackage, - jsArrayToRMatrix, -} from '../src/lib/utils.ts' -async function executeRCode(code: string, url: string, password: string): Promise { - const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password, code }) }) - return await res.text() -} -const URL = 'http://localhost:8000/execute' -const PASSWORD = '123456' -const PACKAGES = ['psych', 'GPArotation', 'jsonlite'] -const DATA = new Array(10).fill(0).map(() => new Array(50).fill(0).map(() => Math.random())) -// 使用 R 的 psych 库计算探索性因素分析 -const CODE = ` -# 加载所需的 R 包、数据 -${loadRPackage(PACKAGES)} -data <- ${jsArrayToRMatrix(DATA)} -# 计算 Omega 系数 -omega_result <- omega(data) -# 返回结果 (total omega) -json_result <- toJSON(omega_result$omega.tot) -json_result -` -const data = await executeRCode(CODE, URL, PASSWORD) -try { - console.log(JSON.parse(JSON.parse(data).result)) -} catch { - console.log(data) -}