Преглед на файлове

更新应用结构,调整deploy.sh、package.json和app.ts中的文件路径,新增server.ts以优化应用启动流程。

wui преди 6 месеца
родител
ревизия
8350d89953
променени са 4 файла, в които са добавени 47 реда и са изтрити 38 реда
  1. 3 3
      deploy.sh
  2. 2 2
      package.json
  3. 28 33
      src/app.ts
  4. 14 0
      src/server.ts

+ 3 - 3
deploy.sh

@@ -79,8 +79,8 @@ echo "🔨 构建项目..."
 yarn build
 
 # 检查构建是否成功
-if [ ! -f "dist/app.js" ]; then
-    echo "❌ 构建失败: dist/app.js 文件不存在"
+if [ ! -f "dist/server.js" ]; then
+    echo "❌ 构建失败: dist/server.js 文件不存在"
     exit 1
 fi
 
@@ -94,7 +94,7 @@ if pm2 list | grep -q "tweb-api"; then
     pm2 restart tweb-api --node-args="--experimental-specifier-resolution=node"
 else
     echo "🚀 启动新的 PM2 应用..."
-    pm2 start dist/app.js --name tweb-api --node-args="--experimental-specifier-resolution=node"
+    pm2 start dist/server.js --name tweb-api --node-args="--experimental-specifier-resolution=node"
 fi
 pm2 save
 

+ 2 - 2
package.json

@@ -5,8 +5,8 @@
   "license": "MIT",
   "scripts": {
     "build": "tsc",
-    "start": "node dist/app.js",
-    "dev": "ts-node-dev --respawn --transpile-only src/app.ts",
+    "start": "node dist/server.js",
+    "dev": "ts-node-dev --respawn --transpile-only src/server.ts",
     "typeorm": "typeorm-ts-node-commonjs",
     "test": "node --env-file=.env.test ./node_modules/mocha/bin/mocha --allow-uncaught"
   },

+ 28 - 33
src/app.ts

@@ -1,5 +1,5 @@
 import 'reflect-metadata'
-import fastify from 'fastify'
+import { fastify, errorCodes } from 'fastify'
 import cors from '@fastify/cors'
 import jwt from '@fastify/jwt'
 import swagger from '@fastify/swagger'
@@ -11,35 +11,34 @@ import { createDataSource } from './config/database'
 import userRoutes from './routes/user.routes'
 import recordsRoutes from './routes/records.routes'
 import fileRoutes from './routes/file.routes'
-import { config } from 'dotenv'
-
-config()
 
 const options: FastifyEnvOptions = {
   schema: schema,
   dotenv: {
-    debug: true
-  }
+    debug: false,
+  },
 }
 
-const app = fastify({
-  // disableRequestLogging: true,
-  logger: {
-    transport: {
-      target: 'pino-pretty',
-      options: {
-        translateTime: 'yy/mm/dd HH:MM:ss Z',
-        ignore: 'pid,hostname'
+export const createApp = async () => {
+  const app = fastify({
+    disableRequestLogging: true,
+    logger: {
+      level: process.env.NODE_ENV === 'development' ? 'debug' : 'info',
+      transport: {
+        target: 'pino-pretty',
+        options: {
+          translateTime: 'yy/mm/dd HH:MM:ss Z',
+          ignore: 'pid,hostname'
+        }
       }
     }
-  }
-})
+  })
 
-const start = async () => {
   await app.register(fastifyEnv, options)
 
   app.register(cors, {
-    origin: true
+    origin: true,
+    methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
   })
 
   app.register(jwt, {
@@ -51,7 +50,7 @@ const start = async () => {
 
   app.register(multipart, {
     limits: {
-      fileSize: 200 * 1024 * 1024 // 200MB
+      fileSize: 200 * 1024 * 1024
     }
   })
 
@@ -69,9 +68,11 @@ const start = async () => {
     }
   })
 
-  app.register(swaggerUi, {
-    routePrefix: '/documentation'
-  })
+  if (app.config.NODE_ENV === 'development') {
+    app.register(swaggerUi, {
+      routePrefix: '/documentation'
+    })
+  }
 
   app.register(userRoutes, { prefix: '/api/users' })
   app.register(recordsRoutes, { prefix: '/api/records' })
@@ -79,18 +80,12 @@ const start = async () => {
 
   const dataSource = createDataSource(app)
   await dataSource.initialize()
-
   app.decorate('dataSource', dataSource)
 
-  await app.listen({
-    port: app.config.PORT,
-    host: app.config.HOST
+  app.addHook('onClose', async () => {
+    await dataSource.destroy()
+    process.exit(0)
   })
-}
 
-start().catch(err => {
-  console.error('Error starting application:', err)
-  process.exit(1)
-})
-
-export default app
+  return app
+}

+ 14 - 0
src/server.ts

@@ -0,0 +1,14 @@
+import { createApp } from './app'
+
+const start = async () => {
+  const app = await createApp()
+  await app.listen({
+    port: app.config.PORT,
+    host: app.config.HOST
+  })
+}
+
+start().catch(err => {
+  console.error('Error starting application:', err)
+  process.exit(1)
+})