| 11 | import fastify from "fastify"; |
| 12 | |
| 13 | const initAppServer = async () => { |
| 14 | try { |
| 15 | const server = fastify({ |
| 16 | routerOptions: { |
| 17 | // 忽略尾随斜杠 |
| 18 | ignoreTrailingSlash: true, |
| 19 | }, |
| 20 | }); |
| 21 | // 注册插件 |
| 22 | server.register(fastifyCookie); |
| 23 | server.register(fastifyMultipart); |
| 24 | // 生产环境启用静态文件 |
| 25 | if (!isDev) { |
| 26 | serverLog.info("📂 Serving static files from /renderer"); |
| 27 | server.register(fastifyStatic, { |
| 28 | root: join(__dirname, "../renderer"), |
| 29 | }); |
| 30 | } |
| 31 | // 声明 |
| 32 | server.get("/api", (_, reply) => { |
| 33 | reply.send({ |
| 34 | name: "SPlayer API", |
| 35 | description: "SPlayer API service", |
| 36 | author: "@imsyy", |
| 37 | list: [ |
| 38 | { |
| 39 | name: "NeteaseCloudMusicApi", |
| 40 | url: "/api/netease", |
| 41 | }, |
| 42 | { |
| 43 | name: "UnblockAPI", |
| 44 | url: "/api/unblock", |
| 45 | }, |
| 46 | { |
| 47 | name: "ControlAPI", |
| 48 | url: "/api/control", |
| 49 | }, |
| 50 | { |
| 51 | name: "QQMusicAPI", |
| 52 | url: "/api/qqmusic", |
| 53 | }, |
| 54 | ], |
| 55 | }); |
| 56 | }); |
| 57 | // 注册接口 |
| 58 | server.register(initNcmAPI, { prefix: "/api" }); |
| 59 | server.register(initUnblockAPI, { prefix: "/api" }); |
| 60 | server.register(initControlAPI, { prefix: "/api" }); |
| 61 | server.register(initQQMusicAPI, { prefix: "/api" }); |
| 62 | // 启动端口 |
| 63 | const port = Number(process.env["VITE_SERVER_PORT"] || 25884); |
| 64 | await server.listen({ port, host: "127.0.0.1" }); |
| 65 | serverLog.info(`🌐 Starting AppServer on port ${port}`); |
| 66 | return server; |
| 67 | } catch (error) { |
| 68 | serverLog.error("🚫 AppServer failed to start"); |
| 69 | throw error; |
| 70 | } |