Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Community_backend/.env
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
PORT=3000
NODE_ENV=production
NODE_ENV=development
MONGODB_URI=mongodb+srv://PetDerma:ECNU@cluster0.wdid0qc.mongodb.net/PetDerma?retryWrites=true&w=majority&appName=Cluster0
JWT_SECRET=ab12cd34ef56a7890b1c2d3e4f5061728394a5b6c7d8e9fa0abbccddeeff1122
LOCAL_STORAGE_PATH=./uploads
Expand Down
47 changes: 46 additions & 1 deletion Community_backend/app.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const express = require("express");
const path = require("path");
const cors = require("cors");
const helmet = require("helmet");
const morgan = require("morgan");
Expand All @@ -16,6 +17,8 @@ const uploadRoutes = require("./routes/upload");
const imageRoutes = require("./routes/images");
const petRoutes = require("./routes/pets");
const healthRoutes = require("./routes/health");
const doctorRoutes = require("./routes/doctor");
const institutionRoutes = require("./routes/institution");

// 导入中间件
const { handleUploadError } = require("./middleware/upload");
Expand Down Expand Up @@ -58,7 +61,7 @@ setTimeout(async () => {
/* ------------------------------------------------------------------
✅ 安全、CORS、日志、限流中间件(位置保持不变)
------------------------------------------------------------------- */
app.use(helmet());
app.use(helmet({ contentSecurityPolicy: false }));

app.use(
cors({
Expand Down Expand Up @@ -143,13 +146,55 @@ app.get("/health", (req, res) => {
});
});

// B 端预览页面
app.get("/doctor-preview", (req, res) => {
res.sendFile(path.join(__dirname, "..", "doctor-preview.html"));
});
app.get("/doctor-preview.css", (req, res) => {
res.sendFile(path.join(__dirname, "..", "doctor-preview.css"));
});
app.get("/doctor-preview.js", (req, res) => {
res.sendFile(path.join(__dirname, "..", "doctor-preview.js"));
});

// 机构端预览页面
app.get("/institution-preview", (req, res) => {
res.sendFile(path.join(__dirname, "..", "institution-preview.html"));
});

// 首页预览页面(入口1:机构端入口)
app.get("/home-preview", (req, res) => {
res.sendFile(path.join(__dirname, "..", "home-preview.html"));
});

// 地图导航页预览(入口2:发送AI报告给机构)
app.get("/map-preview", (req, res) => {
res.sendFile(path.join(__dirname, "..", "map-preview.html"));
});

// 诊断结果页预览(入口3:预约线下复核)
app.get("/result-preview", (req, res) => {
res.sendFile(path.join(__dirname, "..", "result-preview.html"));
});

// 主页入口(首页重定向)
app.get("/", (req, res) => {
res.redirect("/home-preview");
});

app.use("/api/auth", authRoutes);
app.use("/api/posts", postRoutes);
app.use("/api/interactions", interactionRoutes);
app.use("/api/upload", uploadLimiter, uploadRoutes);
app.use("/api/pets", petRoutes);
app.use("/api/health", healthRoutes);

// 医生端 API
app.use("/api/doctor", doctorRoutes);

// 机构端 API
app.use("/api/institution", institutionRoutes);

// 图片路由
app.use(
"/api/images",
Expand Down
35 changes: 29 additions & 6 deletions Community_backend/config/database.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
const mongoose = require('mongoose');

let memoryServer = null;

// MongoDB连接配置
const connectDB = async () => {
try {
const conn = await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/PetDerma_Community', {
useNewUrlParser: true,
useUnifiedTopology: true,
const uri = process.env.MONGODB_URI || 'mongodb://localhost:27017/PetDerma_Community';
console.log(`🔌 尝试连接 MongoDB: ${uri.replace(/\/\/.*@/, '//***@')}`);

const conn = await mongoose.connect(uri, {
serverSelectionTimeoutMS: 5000,
});

console.log(`MongoDB Connected: ${conn.connection.host}`);
console.log(`✅ MongoDB 已连接: ${conn.connection.host}`);
return conn;
} catch (error) {
console.error('MongoDB connection error:', error);
process.exit(1);
console.error('❌ 远程 MongoDB 连接失败:', error.message);
console.log('🔄 尝试启动本地内存数据库...');

try {
const { MongoMemoryServer } = require('mongodb-memory-server');
memoryServer = await MongoMemoryServer.create();
const localUri = memoryServer.getUri();

console.log(`📦 内存数据库已启动: ${localUri}`);

const conn = await mongoose.connect(localUri);
console.log(`✅ 内存 MongoDB 已连接: ${conn.connection.host}`);
return conn;
} catch (memError) {
console.error('❌ 内存数据库启动失败:', memError.message);
process.exit(1);
}
}
};

Expand All @@ -31,6 +51,9 @@ mongoose.connection.on('disconnected', () => {
// 优雅关闭
process.on('SIGINT', async () => {
await mongoose.connection.close();
if (memoryServer) {
await memoryServer.stop();
}
console.log('MongoDB connection closed through app termination');
process.exit(0);
});
Expand Down
Loading