Przeglądaj źródła

feat: server local env & prod start

ryanemax 8 miesięcy temu
rodzic
commit
57accbb166

+ 2 - 2
README.md

@@ -19,9 +19,9 @@ npm run start
 - 服务器
     - root@8.140.98.43
 - 数据库
-    - psql --dbname=postgresql://8.140.98.43:25432/
+    - psql --dbname=postgresql://postgres:Edu2024textbask@127.0.0.1:25432/
 ``` sql
-ALTER USER postgres WITH PASSWORD 'Edu@0@$textbook';
+ALTER USER postgres WITH PASSWORD 'Edu2024textbask';
 ```
 
 ## Authing 用户服务

+ 4 - 3
server/api/textbook/routes.js

@@ -88,7 +88,7 @@ function getUserByMobile(mobile, company) {
     return query.first({ useMasterKey: true });
 }
 /* 创建_Session并返回 */
-const db = require("../../db/pg-instance")
+import {pgClient} from "../../db/pg-instance";
 
 async function setMobileSessionToken(user, reset) {
     try {
@@ -127,7 +127,7 @@ async function setMobileSessionToken(user, reset) {
             "expiresAt"=excluded."expiresAt",
             "createdWith"=excluded."createdWith"
             `
-            const data = await db.any(sql);
+            const data = await pgClient().any(sql);
             console.log('_Session', data)
             let doneObj = {
                 get(field = 'sessionToken') {
@@ -163,4 +163,5 @@ async function setMobileSessionToken(user, reset) {
         return false
     }
 }
-module.exports = router;
+module.exports = router;
+export const textbookRouter = router;

+ 17 - 15
server/cloud/authing/func-authing-session-sync.js

@@ -1,20 +1,22 @@
 const { AuthenticationClient } = require('authing-js-sdk')
-const { pgClient } = require('../../db/pg-instance')
+import { pgClient } from '../../db/pg-instance'
 
-Parse.Cloud.define("authingLogin", async (request) => {
-    let token = request.params.token;
-    if(token) {
-        let result = await syncSessionWithIdToken(token)
-        return result
-    }
-    return null
-  },{
-    fields : {
-        token:{
-            required:true
+export function defineAuthingLogin(){
+    Parse.Cloud.define("authingLogin", async (request) => {
+        let token = request.params.token;
+        if(token) {
+            let result = await syncSessionWithIdToken(token)
+            return result
         }
-    }
-  });
+        return null
+    },{
+        fields : {
+            token:{
+                required:true
+            }
+        }
+    });
+}
   
 
 /**
@@ -63,7 +65,7 @@ async function syncSessionWithIdToken(token){
     if(user?.id&&user?.token){
         try {
             // 查询:数据库版本信息
-            const data = await pgClient.any(syncSessionSQL,params);
+            const data = await pgClient().any(syncSessionSQL,params);
             // console.log(data)
             return {
                 sid:sessionObjectId,

+ 1 - 1
server/cloud/authing/index.js

@@ -1 +1 @@
-require("./func-authing-session-sync")
+export * from "./func-authing-session-sync"

+ 1 - 1
server/cloud/main.js

@@ -1,2 +1,2 @@
 'use strict'
-require("./authing")
+export * from "./authing/index"

+ 1 - 1
server/config.js

@@ -5,5 +5,5 @@ module.exports = {
     "PARSE_APPID":"edu-textbook",
     "PARSE_MASTERKEY":"EDU2024",
     "NOVA_SERVERURL":"http://localhost:61337/",
-    "DATABASE_LOCAL":true, // 加载本地测试数据库
+    "DATABASE_LOCAL":false, // 加载本地测试数据库
 }

+ 184 - 0
server/config/nginx-server.conf

@@ -0,0 +1,184 @@
+# server {
+
+#     server_name _;
+#     server_tokens off;
+
+#     #large_client_header_buffers 4 32k;
+#     client_max_body_size 50M;
+
+#     charset utf-8;
+
+#     index index.html;
+
+
+#     # 启动SSL及证书匹配 ######################################################
+#     listen 443 ssl default_server; # managed by Certbot
+    
+#     # ssl_certificate /etc/letsencrypt/live/edutextbook/fullchain.pem; # managed by Certbot
+#     # ssl_certificate_key /etc/letsencrypt/live/edutextbook/privkey.pem; # managed by Certbot
+
+#     # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
+#     # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
+
+# 	# 启用OCSP stapling ######################################################
+# 	ssl_stapling on;
+# 	ssl_stapling_verify on;
+# 	# valid表示缓存5分钟
+# 	resolver 8.8.8.8 8.8.4.4 valid=300s;
+# 	# 网络超时时间
+# 	resolver_timeout 5s;
+
+# 	# 启动Gzip Json模式 ######################################################
+# 	gzip_http_version 1.0;  # gzip支持http协议 proxy 必须用
+#     gzip  on;
+# 	gzip_vary on;
+# 	gzip_proxied       any;
+# 	gzip_static on;
+# 	gzip_comp_level  4;
+# 	gzip_min_length 256;
+#     gzip_buffers     4 8k;
+#     gzip_types       text/html text/plain application/javascript application/x-javascript text/css application/xml application/json;
+
+#     location /api {
+#         if ($request_method = 'OPTIONS') {
+#             add_header 'Access-Control-Allow-Origin' '*';
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+#             #
+#             # Custom headers and headers various browsers *should* be OK with but aren't
+#             #
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+#             #
+#             # Tell client that this pre-flight info is valid for 20 days
+#             #
+#             add_header 'Access-Control-Max-Age' 1728000;
+#             add_header 'Content-Type' 'text/plain; charset=utf-8';
+#             add_header 'Content-Length' 0;
+#             return 204;
+#         }
+#         if ($request_method = 'POST') {
+#             add_header 'Access-Control-Allow-Origin' '*' always;
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+#             add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+#         }
+#         if ($request_method = 'GET') {
+#             add_header 'Access-Control-Allow-Origin' '*' always;
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+#             add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+#         }
+
+#         rewrite ^/(.*)$ /$1 break;
+#         proxy_pass http://127.0.0.1:61337/api;
+#     }
+
+#     location /parse {
+#         if ($request_method = 'OPTIONS') {
+#             add_header 'Access-Control-Allow-Origin' '*';
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+#             #
+#             # Custom headers and headers various browsers *should* be OK with but aren't
+#             #
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+#             #
+#             # Tell client that this pre-flight info is valid for 20 days
+#             #
+#             add_header 'Access-Control-Max-Age' 1728000;
+#             add_header 'Content-Type' 'text/plain; charset=utf-8';
+#             add_header 'Content-Length' 0;
+#             return 204;
+#         }
+#         if ($request_method = 'POST') {
+#             add_header 'Access-Control-Allow-Origin' '*' always;
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+#             add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+#         }
+#         if ($request_method = 'GET') {
+#             add_header 'Access-Control-Allow-Origin' '*' always;
+#             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+#             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+#             add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+#         }
+
+#         rewrite ^/(.*)$ /$1 break;
+#         proxy_pass http://127.0.0.1:61337/parse;
+#     }
+
+#     location /{
+#         proxy_set_header Host $http_host;
+#         proxy_set_header X-Real-IP $remote_addr;
+#         proxy_set_header X-Scheme $scheme;
+#         proxy_set_header X-Forwarded-Proto $scheme;
+#         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+#         proxy_pass http://127.0.0.1:61337/;
+#         proxy_redirect off;
+#     }
+
+# }
+
+
+server {
+    listen 80 default_server;
+    server_name _;
+
+    # 启动Gzip Json模式 ######################################################
+	gzip_http_version 1.0;  # gzip支持http协议 proxy 必须用
+    gzip  on;
+	gzip_vary on;
+	gzip_proxied       any;
+	gzip_static on;
+	gzip_comp_level  4;
+	gzip_min_length 256;
+    gzip_buffers     4 8k;
+    gzip_types       text/html text/plain application/javascript application/x-javascript text/css application/xml application/json;
+    
+    location /api {
+        if ($request_method = 'OPTIONS') {
+            add_header 'Access-Control-Allow-Origin' '*';
+            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+            #
+            # Custom headers and headers various browsers *should* be OK with but aren't
+            #
+            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+            #
+            # Tell client that this pre-flight info is valid for 20 days
+            #
+            add_header 'Access-Control-Max-Age' 1728000;
+            add_header 'Content-Type' 'text/plain; charset=utf-8';
+            add_header 'Content-Length' 0;
+            return 204;
+        }
+        if ($request_method = 'POST') {
+            add_header 'Access-Control-Allow-Origin' '*' always;
+            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+        }
+        if ($request_method = 'GET') {
+            add_header 'Access-Control-Allow-Origin' '*' always;
+            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
+            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Access-Control-Allow-Origin' always;
+            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
+        }
+
+        rewrite ^/(.*)$ /$1 break;
+        proxy_pass http://127.0.0.1:61337/api;
+    }
+
+    location /parse/{
+        proxy_set_header Host $http_host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Scheme $scheme;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_pass http://127.0.0.1:61337/parse/;
+        proxy_redirect off;
+    }
+
+    root /var/www/edu-textbook/;
+    location /{
+        try_files $uri $uri/ /index.html?$query_string;
+    }
+
+}

+ 3 - 1
server/db/data/init-data.sql → server/db/data/init-data.sql.js

@@ -1,4 +1,5 @@
- -- 初始帐套
+export const initDataSQL = `
+-- 初始帐套
 INSERT INTO "Company" ("objectId", "title", "createdAt", "updatedAt")
 VALUES
 ('RbIKpmuaMC', '国家级本科教材遴选','2024-06-16 12:00:00','2024-06-16 12:00:00')
@@ -36,3 +37,4 @@ ON conflict("relatedId","owningId") DO UPDATE
 SET 
 "relatedId" = excluded."relatedId",
 "owningId" = excluded."owningId";
+`

+ 4 - 15
server/db/func/import-data.js

@@ -2,23 +2,15 @@ const pgp = require('pg-promise')();
 const fs = require('fs');
 
 // 连接到数据库
-const db = pgp({
-    user: 'postgres',
-    password: 'postgres',
-    host: 'localhost',
-    port: 25432,
-    database: 'postgres'
-});
+import {pgClient} from "../../db/pg-instance"
 
-let initDataSQL
-try{initDataSQL = fs.readFileSync("../data/init-data.sql").toString()}catch(err){}
-try{initDataSQL = fs.readFileSync("./db/data/init-data.sql").toString()}catch(err){}
+import {initDataSQL} from "../data/init-data.sql"
 // 执行SELECT语句并返回结果的函数
-async function main() {
+export async function importData() {
     console.log("加载初始化数据")
     try {
         // 查询:数据库版本信息
-        const data = await db.any(initDataSQL);
+        const data = await pgClient().any(initDataSQL);
         console.log(data)
         return data;
     } catch (error) {
@@ -26,6 +18,3 @@ async function main() {
         return null;
     }
 }
-
-// 调用函数并处理结果
-main()

+ 2 - 2
server/db/func/import-schemas.js

@@ -1,9 +1,9 @@
 const Parse = require("parse/node")
 Parse.Cloud.useMasterKey();
 
-const EduSchemas = require("../index").EduSchemas
+import {EduSchemas} from "../index"
 
-async function importAllSchemas(){
+export async function importAllSchemas(){
     try{
       Parse.initialize(global.config['PARSE_APPID'],null,global.config['PARSE_MASTERKEY']);
       Parse.serverURL = global.config['PARSE_SERVERURL'];

+ 13 - 7
server/db/index.js

@@ -1,10 +1,16 @@
+import {Company} from "./schemas/Company"
+import {EduTextbook} from "./schemas/EduTextbook"
+import {Profile} from "./schemas/Profile"
+import {EduCollection} from "./schemas/EduCollection"
+import {_User} from "./schemas/_User"
+import {_Role} from "./schemas/_Role"
 
-const EduSchemas = [
-    require("./schemas/Company").Company,
-    require("./schemas/EduTextbook").EduTextbook,
-    require("./schemas/Profile").Profile,
-    require("./schemas/EduCollection").EduCollection,
-    require("./schemas/_User")._User,
-    require("./schemas/_Role")._Role,
+export const EduSchemas = [
+    Company,
+    EduTextbook,
+    Profile,
+    EduCollection,
+    _User,
+    _Role,
 ]
 module.exports.EduSchemas = EduSchemas

+ 19 - 7
server/db/pg-instance.js

@@ -2,16 +2,28 @@ const pgp = require('pg-promise')();
 
 // 连接到数据库
 var PgInstanse;
-const pgClient = function(){
-    if(!PgInstanse){
-        PgInstanse = pgp({
+export const pgClient = function(){
+    let pgconfig = {
+        user: 'postgres',
+        password: 'Edu2024textbask',
+        host: '127.0.0.1',
+        port: 25432,
+        database: 'postgres'
+    }
+    
+    if(global.config['LOCAL']) {
+        pgconfig = {
             user: 'postgres',
             password: 'postgres',
-            host: 'localhost',
+            host: '127.0.0.1',
             port: 25432,
             database: 'postgres'
-        });
+        }
+    }
+    
+    if(!PgInstanse){
+        console.log(pgconfig)
+        PgInstanse = pgp(pgconfig);
     }
     return PgInstanse;
-}
-module.exports.pgClient = pgClient
+}

+ 1 - 1
server/db/schemas/Company.js

@@ -1,4 +1,4 @@
-const Company = {
+export const Company = {
     "className": "Company",
     "fields": {
         "title": {

+ 1 - 1
server/db/schemas/EduCollection.js

@@ -1,4 +1,4 @@
-const EduCollection = {
+export const EduCollection = {
     "className": "EduCollection",
     "fields": {
         "title": {

+ 1 - 1
server/db/schemas/EduTextbook.js

@@ -1,4 +1,4 @@
-const EduTextbook = {
+export const EduTextbook = {
     "className": "EduTextbook",
     "fields": {
         "status": {

+ 1 - 1
server/db/schemas/Profile.js

@@ -1,4 +1,4 @@
-const Profile = {
+export const Profile = {
   "className": "Profile",
   "fields": {
     "user": {

+ 1 - 1
server/db/schemas/_Role.js

@@ -1,4 +1,4 @@
-const _Role = {
+export const _Role = {
     "className": "_Role",
     "fields": {
         "title": {

+ 1 - 1
server/db/schemas/_User.js

@@ -1,4 +1,4 @@
-const _User = {
+export const _User = {
     "className": "_User",
     "fields": {
         "avatar": {

+ 2 - 2
server/lib/pg/index.js

@@ -32,7 +32,7 @@ var DBDataDir
  * cp -rf node_modules/@embedded-postgres/linux-x64/native/* bin/pg/bin/
  * cp -rf node_modules/@embedded-postgres/windows-x64/native/* bin/pg/bin/
  */
-async function PostgreSQLKeep(dbconfig){
+export async function PostgreSQLKeep(dbconfig){
     DBDataDir = path.join(OWN_DIR,dbconfig.dbpath)
 
     console.log("PostgreSQLKeep",dbconfig)
@@ -147,4 +147,4 @@ function pgStatus(dbconfig){
     }
     return "nostart"
 }
-module.exports.PostgreSQLKeep = PostgreSQLKeep
+// module.exports.PostgreSQLKeep = PostgreSQLKeep

+ 4 - 9
server/package-lock.json

@@ -9,16 +9,17 @@
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
+        "@embedded-postgres/linux-x64": "^16.2.0-beta.11",
+        "@embedded-postgres/windows-x64": "^16.2.0-beta.11",
         "authing-js-sdk": "^4.23.51",
         "parse-dashboard": "^5.4.0",
-        "parse-server": "^7.0.0"
+        "parse-server": "^7.0.0",
+        "yargs": "17.7.2"
       },
       "bin": {
         "server": "server.js"
       },
       "devDependencies": {
-        "@embedded-postgres/linux-x64": "^16.2.0-beta.11",
-        "@embedded-postgres/windows-x64": "^16.2.0-beta.11",
         "pkg": "^5.8.1",
         "vite": "^4.5.3",
         "vite-plugin-dts": "^3.9.1",
@@ -738,7 +739,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "hasInstallScript": true,
       "os": [
         "linux"
@@ -754,7 +754,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "hasInstallScript": true,
       "os": [
         "win32"
@@ -4043,7 +4042,6 @@
       "version": "8.0.1",
       "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz",
       "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-      "optional": true,
       "dependencies": {
         "string-width": "^4.2.0",
         "strip-ansi": "^6.0.1",
@@ -12462,7 +12460,6 @@
       "version": "5.0.8",
       "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
       "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "devOptional": true,
       "engines": {
         "node": ">=10"
       }
@@ -12476,7 +12473,6 @@
       "version": "17.7.2",
       "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz",
       "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "optional": true,
       "dependencies": {
         "cliui": "^8.0.1",
         "escalade": "^3.1.1",
@@ -12494,7 +12490,6 @@
       "version": "21.1.1",
       "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz",
       "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "optional": true,
       "engines": {
         "node": ">=12"
       }

+ 1 - 8
server/package.json

@@ -29,17 +29,10 @@
     "authing-js-sdk": "^4.23.51",
     "parse-dashboard": "^5.4.0",
     "parse-server": "^7.0.0",
+    "yargs":"17.7.2",
     "@embedded-postgres/linux-x64": "^16.2.0-beta.11",
     "@embedded-postgres/windows-x64": "^16.2.0-beta.11"
   },
-  "os":{
-    "linux":{
-      "@embedded-postgres/linux-x64": "^16.2.0-beta.11"
-    },
-    "win32":{
-      "@embedded-postgres/windows-x64": "^16.2.0-beta.11"
-    }
-  },
   "devDependencies": {
     "pkg": "^5.8.1",
     "vite": "^4.5.3",

+ 20 - 12
server/server.js

@@ -1,6 +1,8 @@
+
 // 数据库启动器
 const path = require("path")
 const fs = require("fs")
+const argv = require('yargs').argv
 
 // 全局配置加载
 // IMPORTANT:通过apps/<appId>/加载应用独立配置
@@ -35,6 +37,12 @@ global.config['PARSE_APPID'] = process.env["PARSE_APPID"] || appConfig["PARSE_AP
 global.config['PARSE_MASTERKEY'] = process.env["PARSE_MASTERKEY"] || appConfig["PARSE_MASTERKEY"] || false
 global.config['SEGMENT_COUNT'] = process.env["SEGMENT_COUNT"] || appConfig["SEGMENT_COUNT"] || false
 
+global.config["LOCAL"] = argv.local || process.env["LOCAL"] || appConfig["LOCAL"] || global.config['DATABASE_LOCAL'] ||  false
+
+
+import  {textbookRouter} from "./api/textbook/routes";
+import { defineAuthingLogin } from "./cloud/authing"
+import { importData } from "./db/func/import-data"
 
 
 // 全局共享属性
@@ -58,8 +66,8 @@ console.log(cpus.length)
 const app = express();
 
 const cors = require('cors');
-const { importAllSchemas } = require("./db/func/import-schemas")
-const { PostgreSQLKeep } = require("./lib/pg/index.js")
+import { importAllSchemas } from "./db/func/import-schemas"
+import { PostgreSQLKeep } from "./lib/pg/index.js"
 app.use(cors({
     origin: '*'
 }));
@@ -72,28 +80,27 @@ global.parseConfig = {
 }
 
 global.parseConfig.serverURL = `http://localhost:${global.parseConfig?.port}/parse`
-  global.parseConfig.databaseURI = "postgresql://postgres@127.0.0.1:25432/"
-  if(global.config['DATABASE_LOCAL']) {
+global.parseConfig.databaseURI = "postgresql://postgres:Edu2024textbask@127.0.0.1:25432/"
+if(global.config['LOCAL']) {
   global.parseConfig.databaseURI = "postgresql://postgres@127.0.0.1:25432/"
 }
 global.parseConfig.appId = 'edu-textbook'
 global.parseConfig.appName = 'EduParse'
 global.parseConfig.masterKey = 'EDU2024'
-global.parseConfig.cloud = './cloud/main.js'
+// global.parseConfig.cloud = './cloud/main.js'
 
 Parse.initialize(global.parseConfig.appId,null,global.parseConfig.masterKey);
 Parse.serverURL = global.parseConfig.serverURL;
 
 async function startParse(){
-  if(global.config['DATABASE_LOCAL']) {
+  if(global.config['LOCAL']) {
+    console.log("PostgreSQLKeep")
     await PostgreSQLKeep({
-        username:"postgres",
-        password:"postgres",
-        port:"25432",
-        dbpath:"database/edudata"
+        username:"postgres",password:"postgres",port:"25432",dbpath:"database/edudata"
     })
   }
   // 挂载微服务
+  console.log(global.parseConfig)
   const api = new ParseServer(global.parseConfig);
   await api.start();
 
@@ -136,7 +143,6 @@ async function initParseAndDatabase(){
 
     console.log("正在启动api接口")
     // 加载textbook专属路由 通过代理操控局域网设备
-    let textbookRouter = require("./api/textbook/routes")
     app.use("/api/textbook",textbookRouter)
     app.get("/",(req,res)=>{
       res.json({
@@ -155,8 +161,10 @@ async function initParseAndDatabase(){
       await importAllSchemas();
       // 导入初始化数据
       setTimeout(() => {
-        require("./db/func/import-data")
+        importData()
       }, 500);
+      // 导入CloudCode
+      defineAuthingLogin()
     });
  
     console.log("正在启动管理看板...")

+ 3 - 3
server/vite.config.js

@@ -9,9 +9,9 @@ export default defineConfig({
     plugins: [
         VitePluginNode({
             adapter:"express",
-            appPath:"server.js",
+            appPath:"./server.js",
             exportName:"EduTextbookServer",
-            initAppOnBoot:false,
+            // initAppOnBoot:false,
         }),
         obfuscatorPlugin({
             include: ["**/*.js"],
@@ -29,7 +29,7 @@ export default defineConfig({
                 deadCodeInjectionThreshold: 0.2,
                 disableConsoleOutput: true,
                 identifierNamesGenerator: 'hexadecimal',
-                log: false,
+                log: true,
                 renameGlobals: false,
                 rotateStringArray: true,
                 selfDefending: false,