update server.js

update the server file according wsl
This commit is contained in:
2026-03-10 11:08:58 +00:00
parent edb525eb80
commit 74918d251f

View File

@@ -1,147 +1,364 @@
require('dotenv').config(); // require('dotenv').config();
// import uploadRoutes from "./routes/upload.routes"; // // import uploadRoutes from "./routes/upload.routes";
const uploadRoutes = require('./routes/upload.routes'); // const uploadRoutes = require('./routes/upload.routes');
const express = require('express'); // const express = require('express');
const cors = require('cors'); // const cors = require('cors');
const helmet = require('helmet'); // const helmet = require('helmet');
const morgan = require('morgan'); // const morgan = require('morgan');
const cookieParser = require('cookie-parser'); // const cookieParser = require('cookie-parser');
// const {
// initializeDatabases,
// closeDatabaseConnections,
// } = require('./config/database');
// const { errorHandler, notFound } = require('./middleware/errorHandler');
// const app = express();
// const PORT = process.env.PORT || 3000;
// // Security middleware
// app.use(
// helmet({
// contentSecurityPolicy: false, // Disable for API
// crossOriginEmbedderPolicy: false,
// })
// );
// const allowedOrigins = process.env.CORS_ORIGIN
// ? process.env.CORS_ORIGIN.split(',').map(origin => origin.trim())
// : [];
// const corsOptions = {
// origin: function (origin, callback) {
// // Allow requests with no origin (like Postman, mobile apps)
// if (!origin) return callback(null, true);
// if (allowedOrigins.includes(origin)) {
// callback(null, true);
// } else {
// callback(new Error('Not allowed by CORS'));
// }
// },
// credentials: true,
// methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
// allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
// };
// app.use(cors(corsOptions));
// // Body parsing middleware
// app.use(express.json({ limit: '10mb' }));
// app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// app.use(cookieParser());
// // Logging middleware
// if (process.env.NODE_ENV !== 'test') {
// app.use(morgan('combined'));
// }
// // Health check endpoint
// app.get('/health', async (req, res) => {
// try {
// res.status(200).json({
// status: 'SUCCESS',
// message: 'Vaishnavi Creation API is running successfully 🚀',
// service: 'vaishnavi-backend',
// version: '1.0.0',
// environment: process.env.NODE_ENV,
// timestamp: new Date().toISOString(),
// uptime_seconds: process.uptime(),
// memory_usage: process.memoryUsage().rss, // RAM usage
// });
// } catch (error) {
// res.status(500).json({
// status: 'ERROR',
// message: 'Health check failed',
// error: error.message,
// });
// }
// });
// // API Routes
// app.use('/api/auth', require('./routes/auth'));
// app.use('/api/users', require('./routes/users'));
// app.use('/api/products', require('./routes/products'));
// app.use('/api/orders', require('./routes/orders'));
// app.use('/api/wardrobe', require('./routes/wardrobe'));
// app.use('/api/delivery', require('./routes/deliveryRoutes'));
// app.use('/api/coupons', require('./routes/couponRoutes'));
// app.use('/api/admin', require('./routes/admin'));
// app.use('/api/admin/reports', require('./routes/reports'));
// app.use('/api/payments', require('./routes/paymentRoutes'));
// // Upload route
// app.use('/api', uploadRoutes);
// // Root endpoint
// app.get('/', (req, res) => {
// res.json({
// message: 'Vaishnavi Creation API',
// version: '1.0.0',
// documentation: '/api/docs',
// health: '/health',
// });
// });
// // Error handling middleware (must be last)
// app.use(notFound);
// app.use(errorHandler);
// // Graceful shutdown
// process.on('SIGTERM', async () => {
// console.log('SIGTERM received, shutting down gracefully');
// await closeDatabaseConnections();
// process.exit(0);
// });
// process.on('SIGINT', async () => {
// console.log('SIGINT received, shutting down gracefully');
// await closeDatabaseConnections();
// process.exit(0);
// });
// // Start server
// const startServer = async () => {
// try {
// // Initialize database connections
// await initializeDatabases();
// // Start the server
// app.listen(PORT, () => {
// console.log(`🚀 Server running on port ${PORT}`);
// console.log(`📚 API Documentation: http://localhost:${PORT}/api/docs`);
// console.log(`🏥 Health Check: http://localhost:${PORT}/health`);
// console.log(`🌍 Environment: ${process.env.NODE_ENV}`);
// });
// } catch (error) {
// console.error('❌ Failed to start server:', error);
// process.exit(1);
// }
// };
// // Only start server if this file is run directly
// if (require.main === module) {
// startServer();
// }
// module.exports = app;
require("dotenv").config({
path: require("path").resolve(__dirname, "../.env"),
});
const path = require("path");
const express = require("express");
const cors = require("cors");
const helmet = require("helmet");
const morgan = require("morgan");
const cookieParser = require("cookie-parser");
// Routes
const uploadRoutes = require(path.join(__dirname, "routes/upload.routes"));
// Database
const { const {
initializeDatabases, initializeDatabases,
closeDatabaseConnections, closeDatabaseConnections,
} = require('./config/database'); } = require(path.join(__dirname, "config/database"));
const { errorHandler, notFound } = require('./middleware/errorHandler');
// Middleware
const {
errorHandler,
notFound,
} = require(path.join(__dirname, "middleware/errorHandler"));
const app = express(); const app = express();
const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;
// Security middleware /*
|--------------------------------------------------------------------------
| Security Middleware
|--------------------------------------------------------------------------
*/
app.use( app.use(
helmet({ helmet({
contentSecurityPolicy: false, // Disable for API contentSecurityPolicy: false,
crossOriginEmbedderPolicy: false, crossOriginEmbedderPolicy: false,
}) })
); );
/*
|--------------------------------------------------------------------------
| CORS Configuration
|--------------------------------------------------------------------------
*/
const allowedOrigins = process.env.CORS_ORIGIN const allowedOrigins = process.env.CORS_ORIGIN
? process.env.CORS_ORIGIN.split(',').map(origin => origin.trim()) ? process.env.CORS_ORIGIN.split(",").map((origin) => origin.trim())
: []; : [];
const corsOptions = { const corsOptions = {
origin: function (origin, callback) { origin: function (origin, callback) {
// Allow requests with no origin (like Postman, mobile apps)
if (!origin) return callback(null, true); if (!origin) return callback(null, true);
if (allowedOrigins.includes(origin)) { if (allowedOrigins.length === 0 || allowedOrigins.includes(origin)) {
callback(null, true); callback(null, true);
} else { } else {
callback(new Error('Not allowed by CORS')); callback(new Error("Not allowed by CORS"));
} }
}, },
credentials: true, credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'], allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
}; };
app.use(cors(corsOptions)); app.use(cors(corsOptions));
// Body parsing middleware /*
app.use(express.json({ limit: '10mb' })); |--------------------------------------------------------------------------
app.use(express.urlencoded({ extended: true, limit: '10mb' })); | Body Parsers
|--------------------------------------------------------------------------
*/
app.use(express.json({ limit: "10mb" }));
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
app.use(cookieParser()); app.use(cookieParser());
// Logging middleware /*
if (process.env.NODE_ENV !== 'test') { |--------------------------------------------------------------------------
app.use(morgan('combined')); | Logging
|--------------------------------------------------------------------------
*/
if (process.env.NODE_ENV !== "test") {
app.use(morgan("combined"));
} }
// Health check endpoint /*
app.get('/health', async (req, res) => { |--------------------------------------------------------------------------
| Health Check
|--------------------------------------------------------------------------
*/
app.get("/health", async (req, res) => {
try { try {
res.status(200).json({ res.status(200).json({
status: 'SUCCESS', status: "SUCCESS",
message: 'Vaishnavi Creation API is running successfully 🚀', message: "Vaishnavi Creation API is running successfully 🚀",
service: 'vaishnavi-backend', service: "vaishnavi-backend",
version: '1.0.0', version: "1.0.0",
environment: process.env.NODE_ENV, environment: process.env.NODE_ENV,
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
uptime_seconds: process.uptime(), uptime_seconds: process.uptime(),
memory_usage: process.memoryUsage().rss, // RAM usage memory_usage: process.memoryUsage().rss,
}); });
} catch (error) { } catch (error) {
res.status(500).json({ res.status(500).json({
status: 'ERROR', status: "ERROR",
message: 'Health check failed', message: "Health check failed",
error: error.message, error: error.message,
}); });
} }
}); });
// API Routes /*
app.use('/api/auth', require('./routes/auth')); |--------------------------------------------------------------------------
app.use('/api/users', require('./routes/users')); | API Routes
app.use('/api/products', require('./routes/products')); |--------------------------------------------------------------------------
app.use('/api/orders', require('./routes/orders')); */
app.use('/api/wardrobe', require('./routes/wardrobe'));
app.use('/api/delivery', require('./routes/deliveryRoutes'));
app.use('/api/coupons', require('./routes/couponRoutes'));
app.use('/api/admin', require('./routes/admin'));
app.use('/api/admin/reports', require('./routes/reports')); app.use("/api/auth", require(path.join(__dirname, "routes/auth")));
app.use('/api/payments', require('./routes/paymentRoutes')); app.use("/api/users", require(path.join(__dirname, "routes/users")));
// Upload route app.use("/api/products", require(path.join(__dirname, "routes/products")));
app.use('/api', uploadRoutes); app.use("/api/orders", require(path.join(__dirname, "routes/orders")));
app.use("/api/wardrobe", require(path.join(__dirname, "routes/wardrobe")));
app.use("/api/delivery", require(path.join(__dirname, "routes/deliveryRoutes")));
app.use("/api/coupons", require(path.join(__dirname, "routes/couponRoutes")));
app.use("/api/admin", require(path.join(__dirname, "routes/admin")));
app.use("/api/admin/reports", require(path.join(__dirname, "routes/reports")));
app.use("/api/payments", require(path.join(__dirname, "routes/paymentRoutes")));
// Root endpoint // Upload Routes
app.get('/', (req, res) => { app.use("/api", uploadRoutes);
/*
|--------------------------------------------------------------------------
| Root Endpoint
|--------------------------------------------------------------------------
*/
app.get("/", (req, res) => {
res.json({ res.json({
message: 'Vaishnavi Creation API', message: "Vaishnavi Creation API",
version: '1.0.0', version: "1.0.0",
documentation: '/api/docs', documentation: "/api/docs",
health: '/health', health: "/health",
}); });
}); });
// Error handling middleware (must be last) /*
|--------------------------------------------------------------------------
| Error Handling
|--------------------------------------------------------------------------
*/
app.use(notFound); app.use(notFound);
app.use(errorHandler); app.use(errorHandler);
// Graceful shutdown /*
process.on('SIGTERM', async () => { |--------------------------------------------------------------------------
console.log('SIGTERM received, shutting down gracefully'); | Graceful Shutdown
|--------------------------------------------------------------------------
*/
process.on("SIGTERM", async () => {
console.log("SIGTERM received, shutting down gracefully");
await closeDatabaseConnections(); await closeDatabaseConnections();
process.exit(0); process.exit(0);
}); });
process.on('SIGINT', async () => { process.on("SIGINT", async () => {
console.log('SIGINT received, shutting down gracefully'); console.log("SIGINT received, shutting down gracefully");
await closeDatabaseConnections(); await closeDatabaseConnections();
process.exit(0); process.exit(0);
}); });
// Start server /*
|--------------------------------------------------------------------------
| Start Server
|--------------------------------------------------------------------------
*/
const startServer = async () => { const startServer = async () => {
try { try {
// Initialize database connections
await initializeDatabases(); await initializeDatabases();
// Start the server app.listen(PORT, "0.0.0.0", () => {
app.listen(PORT, () => {
console.log(`🚀 Server running on port ${PORT}`); console.log(`🚀 Server running on port ${PORT}`);
console.log(`📚 API Documentation: http://localhost:${PORT}/api/docs`); console.log(`📚 API Docs: http://localhost:${PORT}/api/docs`);
console.log(`🏥 Health Check: http://localhost:${PORT}/health`); console.log(`🏥 Health Check: http://localhost:${PORT}/health`);
console.log(`🌍 Environment: ${process.env.NODE_ENV}`); console.log(`🌍 Environment: ${process.env.NODE_ENV}`);
}); });
} catch (error) { } catch (error) {
console.error('❌ Failed to start server:', error); console.error("❌ Failed to start server:", error);
process.exit(1); process.exit(1);
} }
}; };
// Only start server if this file is run directly /*
|--------------------------------------------------------------------------
| Start App
|--------------------------------------------------------------------------
*/
if (require.main === module) { if (require.main === module) {
startServer(); startServer();
} }