2.2.4.4 Controllers & Routes
User Controller:
// src/controllers/userController.js
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const User = require('../models/User');
exports.register = async (req, res) => {
try {
const { username, email, password } = req.body;
const existingUser = await User.findOne({ where: { email } });
if (existingUser) return res.status(400).json({ error: 'User already exists' });
const salt = await bcrypt.genSalt(10);
const hashedPw = await bcrypt.hash(password, salt);
const newUser = await User.create({ username, email, passwordHash: hashedPw });
return res.status(201).json({ id: newUser.id, username: newUser.username });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Registration failed' });
}
};
exports.login = async (req, res) => {
try {
const { email, password } = req.body;
const user = await User.findOne({ where: { email } });
if (!user) return res.status(401).json({ error: 'Invalid credentials' });
const match = await bcrypt.compare(password, user.passwordHash);
if (!match) return res.status(401).json({ error: 'Invalid credentials' });
const token = jwt.sign({ id: user.id, role: user.role }, process.env.JWT_SECRET, {
expiresIn: '1d'
});
return res.json({ user: { id: user.id, username: user.username }, token });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Login failed' });
}
};
User Routes:
// src/routes/userRoutes.js
const router = require('express').Router();
const userController = require('../controllers/userController');
const auth = require('../middleware/auth');
router.post('/register', userController.register);
router.post('/login', userController.login);
router.get('/profile', auth, async (req, res) => {
// example protected route
// fetch user from DB using req.user.id
});
module.exports = router;
index.js (register routes):
// src/index.js
const express = require('express');
const cors = require('cors');
const userRoutes = require('./routes/userRoutes');
const socketServer = require('./socket/socketServer');
const app = express();
app.use(cors());
app.use(express.json());
app.use('/api/users', userRoutes);
// Additional routes (tradeRoutes, marketRoutes, etc.)
// Socket.io setup
const httpServer = require('http').createServer(app);
socketServer(httpServer);
const PORT = process.env.PORT || 4000;
httpServer.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});
Last updated