83 lines
2.9 KiB
JavaScript
83 lines
2.9 KiB
JavaScript
import express from "express";
|
|
import cors from "cors";
|
|
import path from "node:path";
|
|
import fs from "node:fs";
|
|
import { fileURLToPath } from "node:url";
|
|
import dotenv from "dotenv";
|
|
|
|
import crawlRoutes from "./routes/crawl.routes.js";
|
|
import sitemapRoutes from "./routes/sitemap.routes.js";
|
|
import authRoutes from "./routes/auth.routes.js"; // Login & Signup endpoints
|
|
import paymentRoutes from "./routes/payment.route.js";
|
|
import lighthouseRoutes from "./routes/lighthouse.routes.js"; // <-- ADD THIS
|
|
import messageRoutes from "./routes/message.routes.js";
|
|
import cakeOrderRoutes from "./routes/maisondetreats/cakeOrder.routes.js";
|
|
import blogRoutes from "./routes/blog.routes.js";
|
|
import { connectDB } from "./config/db.js";
|
|
import { mailer } from "./utils/mailer.js";
|
|
|
|
// ------------------ Load environment ------------------
|
|
dotenv.config(); // Must be first
|
|
|
|
// ------------------ Connect database ------------------
|
|
await connectDB();
|
|
|
|
// ------------------ Express setup ------------------
|
|
const app = express();
|
|
const PORT = process.env.PORT || 3010;
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
app.use(express.json());
|
|
app.use(
|
|
cors({
|
|
origin: [
|
|
"http://localhost:3000",
|
|
"http://127.0.0.1:3000",
|
|
"https://api.crawlerx.co",
|
|
"https://app.crawlerx.co",
|
|
"https://maisondetreats.com",
|
|
"https://metatron-admin-backend.metatronhost.com"
|
|
],
|
|
})
|
|
);
|
|
app.use(express.static(path.join(__dirname, "public")));
|
|
|
|
// ------------------ SMTP verification ------------------
|
|
|
|
console.log("SMTP Host:", process.env.SMTP_HOST);
|
|
console.log("SMTP Port:", process.env.SMTP_PORT);
|
|
// ------------------ Routes ------------------
|
|
app.get("/", (_req, res) => {
|
|
const viewer = path.join(__dirname, "public", "crawlerx_viewer.html");
|
|
if (fs.existsSync(viewer)) {
|
|
return res.sendFile(viewer);
|
|
} else {
|
|
return res
|
|
.type("text/plain")
|
|
.send("Metatron backend is running.");
|
|
}
|
|
});
|
|
|
|
app.get("/healthz", (_req, res) => res.json({ ok: true, time: new Date().toISOString() }));
|
|
|
|
app.use("/crawl", crawlRoutes);
|
|
app.use("/sitemap", sitemapRoutes);
|
|
app.use("/api/auth", authRoutes); // Login & Signup endpoints
|
|
app.use("/api/payment", paymentRoutes);
|
|
app.use("/api/lighthouse", lighthouseRoutes);
|
|
app.use("/api/blog", blogRoutes); // All blog/category/comment routes now prefixed with /api/blog
|
|
app.use("/api/messages", messageRoutes);
|
|
app.use("/api/cake-orders", cakeOrderRoutes);
|
|
|
|
// Serve uploaded files
|
|
app.use('/uploads', express.static(path.join(process.cwd(), 'uploads')));
|
|
|
|
// ------------------ Safety nets ------------------
|
|
process.on("unhandledRejection", (err) => console.error("Unhandled Rejection:", err));
|
|
process.on("uncaughtException", (err) => console.error("Uncaught Exception:", err));
|
|
|
|
// ------------------ Start server ------------------
|
|
app.listen(PORT, "0.0.0.0", () => {
|
|
console.log(`🚀 Server running at http://localhost:${PORT}`);
|
|
});
|