server.js full stack
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const morgan = require('morgan');
const path = require('path');
require('dotenv').config();
const app = express();
// Middleware
app.use(cors({
origin: 'http://localhost:5173',
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Accept']
}));
app.use(morgan('dev'));
app.use(express.json());
// Serve static files from public directory
app.use('/uploads', express.static(path.join(__dirname, 'public/uploads')));
app.use('/public', express.static(path.join(__dirname, 'public')));
// Connect to MongoDB
mongoose.connect(process.env.MONGODB_URI)
.then(() => {
console.log('Connected to MongoDB');
console.log('Database Name:', mongoose.connection.name);
console.log('Database Host:', mongoose.connection.host);
console.log('MongoDB Connection State:', mongoose.connection.readyState);
})
.catch(err => {
console.error('Could not connect to MongoDB:', err);
process.exit(1);
});
// Import routes
const userRoutes = require('./routes/userRoutes');
const productRoutes = require('./routes/productRoutes');
const blogRoutes = require('./routes/blogRoutes');
const contactRoutes = require('./routes/contactRoutes');
// Root route
app.get('/', (req, res) => {
res.json({
message: 'Welcome to the EShop API',
endpoints: {
users: '/api/users',
products: '/api/products',
blogs: '/api/blogs',
contact: '/api/contact'
}
});
});
// API routes
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/blogs', blogRoutes);
app.use('/api/contact', contactRoutes);
// Test route
app.get('/api/test', (req, res) => {
res.json({ message: 'API is working' });
});
// Debug route
app.get('/api/debug/db-status', (req, res) => {
const dbStatus = {
isConnected: mongoose.connection.readyState === 1,
dbName: mongoose.connection.name,
dbHost: mongoose.connection.host,
collections: Object.keys(mongoose.connection.collections)
};
res.json(dbStatus);
});
// Catch-all route for API
app.get('/api', (req, res) => {
res.json({
message: 'EShop API root endpoint',
status: 'active',
version: '1.0.0',
endpoints: {
users: '/api/users',
products: '/api/products',
blogs: '/api/blogs',
contact: '/api/contact',
test: '/api/test',
debug: '/api/debug/db-status'
}
});
});
// Handle 404 errors
app.use((req, res, next) => {
res.status(404).json({
success: false,
message: `Cannot ${req.method} ${req.url}`
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error('Error:', err);
res.status(500).json({
success: false,
message: 'Something went wrong!',
error: process.env.NODE_ENV === 'development' ? err.message : undefined
});
});
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
console.log(`API Documentation available at http://localhost:${PORT}/api`);
});
Comments
Post a Comment