update server.js
update the server file according wsl
This commit is contained in:
349
src/server.js
349
src/server.js
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user