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

Popular posts from this blog

Petroleum