diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/index.js | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/backend/index.js b/backend/index.js index b23adc9..7f5ce96 100644 --- a/backend/index.js +++ b/backend/index.js @@ -80,62 +80,57 @@ const validate = (req, res, next) => { }; // Register route with validation and sanitization -app.post('/register', registerValidationRules(), validate, async (req, res) => { +app.post('/register', registerValidationRules(), validate, async (req, res, next) => { const { username, password } = req.body; - const hashedPassword = await bcrypt.hash(password, 10); - - // Save user to Firebase Firestore try { + const hashedPassword = await bcrypt.hash(password, 10); await db.collection('users').doc(username).set({ username, password: hashedPassword }); res.status(201).send('User registered'); } catch (error) { - console.error('Error registering user:', error); - res.status(500).send('Error registering user'); + next(error); // Pass the error to the error handling middleware } }); // Login route with validation and sanitization -app.post('/login', loginValidationRules(), validate, async (req, res) => { +app.post('/login', loginValidationRules(), validate, async (req, res, next) => { const { username, password } = req.body; try { const userDoc = await db.collection('users').doc(username).get(); if (!userDoc.exists) { - return res.status(400).send('Invalid username or password'); + return res.status(400).json({ error: 'Invalid username or password' }); } const user = userDoc.data(); const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { - return res.status(400).send('Invalid username or password'); + return res.status(400).json({ error: 'Invalid username or password' }); } const token = jwt.sign({ username: user.username }, JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } catch (error) { - console.error('Error during login:', error); - res.status(500).send('Error during login'); + next(error); // Pass the error to the error handling middleware } }); // Fetch ads route -app.get('/ads', async (req, res) => { +app.get('/ads', async (req, res, next) => { try { const adsSnapshot = await db.collection('ads').get(); const ads = adsSnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); res.json(ads); } catch (error) { - console.error('Error fetching ads:', error); - res.status(500).send('Error fetching ads'); + next(error); // Pass the error to the error handling middleware } }); // Increment ad view count route -app.post('/ads/:id/view', async (req, res) => { +app.post('/ads/:id/view', async (req, res, next) => { const { id } = req.params; try { @@ -145,27 +140,36 @@ app.post('/ads/:id/view', async (req, res) => { }); res.status(200).json({ message: 'View count incremented' }); } catch (error) { - console.error('Error incrementing ad view count:', error); - res.status(500).send('Error incrementing ad view count'); + next(error); // Pass the error to the error handling middleware } }); // Get ad view counts route -app.get('/ads/:id/view-count', async (req, res) => { +app.get('/ads/:id/view-count', async (req, res, next) => { const { id } = req.params; try { const adDoc = await db.collection('ads').doc(id).get(); if (!adDoc.exists) { - return res.status(404).send('Ad not found'); + return res.status(404).json({ error: 'Ad not found' }); } res.json({ view_count: adDoc.data().view_count }); } catch (error) { - console.error('Error fetching ad view count:', error); - res.status(500).send('Error fetching ad view count'); + next(error); // Pass the error to the error handling middleware } }); +// Centralized error handling middleware +app.use((err, req, res, next) => { + console.error('Server Error:', err); + res.status(err.status || 500).json({ + error: { + message: err.message || 'Internal Server Error', + stack: process.env.NODE_ENV === 'development' ? err.stack : {} + } + }); +}); + // Start the server const PORT = process.env.PORT || 5000; app.listen(PORT, () => { |