53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import Fastify from "fastify";
|
|
import cors from "@fastify/cors";
|
|
import jwt from "@fastify/jwt";
|
|
import multipart from "@fastify/multipart";
|
|
import fastifyStatic from "@fastify/static";
|
|
import { config } from "./config.js";
|
|
import { migrate } from "./db.js";
|
|
import { authRoutes } from "./auth.js";
|
|
import { folderRoutes } from "./folders.js";
|
|
import { modelRoutes } from "./models.js";
|
|
import { storageStatus } from "./storage.js";
|
|
|
|
migrate();
|
|
|
|
const app = Fastify({
|
|
logger: true,
|
|
bodyLimit: 1024 * 1024 * 20
|
|
});
|
|
|
|
await app.register(cors, {
|
|
origin: true,
|
|
credentials: true
|
|
});
|
|
await app.register(jwt, {
|
|
secret: config.jwtSecret
|
|
});
|
|
await app.register(multipart, {
|
|
limits: {
|
|
fileSize: 1024 * 1024 * 200
|
|
}
|
|
});
|
|
await app.register(fastifyStatic, {
|
|
root: config.storageDir,
|
|
prefix: "/storage/"
|
|
});
|
|
|
|
app.get("/api/health", async () => ({ ok: true, storage: storageStatus() }));
|
|
|
|
await app.register(authRoutes);
|
|
await app.register(folderRoutes);
|
|
await app.register(modelRoutes);
|
|
|
|
app.setErrorHandler((error, _request, reply) => {
|
|
const fastifyError = error as { statusCode?: number; message?: string };
|
|
const statusCode = fastifyError.statusCode && fastifyError.statusCode >= 400 ? fastifyError.statusCode : 500;
|
|
app.log.error(error);
|
|
reply.code(statusCode).send({
|
|
message: statusCode === 500 ? "服务器内部错误" : fastifyError.message
|
|
});
|
|
});
|
|
|
|
await app.listen({ host: config.host, port: config.port });
|