Files
CloudSaver/backend/src/app.ts
2025-02-24 15:22:43 +08:00

77 lines
2.0 KiB
TypeScript

// filepath: /d:/code/CloudDiskDown/backend/src/app.ts
import "./types/express";
import express from "express";
import cors from "cors";
import cookieParser from "cookie-parser";
import routes from "./routes/api";
import { errorHandler } from "./middleware/errorHandler";
import sequelize from "./config/database";
import { authMiddleware } from "./middleware/auth";
import GlobalSetting from "./models/GlobalSetting";
import Searcher from "./services/Searcher";
const app = express();
app.use(
cors({
origin: "*",
credentials: true,
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allowedHeaders: ["Content-Type", "Authorization", "Cookie"],
})
);
app.use(cookieParser());
app.use(express.json());
// 应用 token 验证中间件,排除登录和注册接口
app.use((req, res, next) => {
if (
req.path === "/user/login" ||
req.path === "/user/register" ||
req.path.includes("tele-images")
) {
return next();
}
authMiddleware(req, res, next);
});
app.use("/", routes);
const initializeGlobalSettings = async (): Promise<void> => {
const settings = await GlobalSetting.findOne();
if (!settings) {
await GlobalSetting.create({
httpProxyHost: "127.0.0.1",
httpProxyPort: 7890,
isProxyEnabled: true,
CommonUserCode: 9527,
AdminUserCode: 230713,
});
console.log("Global settings initialized with default values.");
}
await Searcher.updateAxiosInstance();
};
// 错误处理
app.use(errorHandler);
const PORT = process.env.PORT || 8009;
// 在同步前禁用外键约束,同步后重新启用
sequelize
.query("PRAGMA foreign_keys = OFF") // 禁用外键
.then(() => sequelize.sync({ alter: true }))
.then(() => sequelize.query("PRAGMA foreign_keys = ON")) // 重新启用外键
.then(() => {
app.listen(PORT, async () => {
await initializeGlobalSettings();
console.log(`Server is running on port ${PORT}`);
});
})
.catch((error) => {
console.error("Database sync failed:", error);
});
export default app;