Make chat
const express = require('express');
const mongoose = require('mongoose');
const socketio = require('socket.io');
const nodemailer = require('nodemailer');
const bcrypt = require('bcryptjs');
const app = express();
// Database setup
mongoose.connect('mongodb://localhost:27017/chatApp');
const User = mongoose.model('User', new mongoose.Schema({
email: { type: String, unique: true },
verificationCode: String,
verified: Boolean
}));
const Message = mongoose.model('Message', new mongoose.Schema({
sender: String,
receiver: String,
message: String,
timestamp: { type: Date, default: Date.now }
}));
// Email configuration
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-email-password'
}
});
// Middleware
app.use(express.static('public'));
app.use(express.json());
// Routes
app.get('/', (req, res) => {
res.send(`
Chat App
`);
});
app.post('/api/send-verification', async (req, res) => {
try {
const { email } = req.body;
const code = Math.floor(100000 + Math.random() * 900000).toString();
const hashedCode = await bcrypt.hash(code, 10);
await User.findOneAndUpdate(
{ email },
{ verificationCode: hashedCode, verified: false },
{ upsert: true, new: true }
);
await transporter.sendMail({
to: email,
subject: 'Verification Code',
text: `Your verification code is: ${code}`
});
res.status(200).send('Code sent');
} catch (error) {
res.status(500).send('Error sending code');
}
});
app.post('/api/verify', async (req, res) => {
try {
const { email, code } = req.body;
const user = await User.findOne({ email });
if (user && await bcrypt.compare(code, user.verificationCode)) {
user.verified = true;
await user.save();
res.json({ success: true });
} else {
res.json({ success: false });
}
} catch (error) {
res.status(500).json({ success: false });
}
});
const server = app.listen(3000, () => {
console.log('Server running on port 3000');
});
const io = socketio(server);
io.on('connection', (socket) => {
socket.on('sendMessage', async ({ sender, receiver, message }) => {
const newMessage = new Message({ sender, receiver, message });
await newMessage.save();
socket.to(receiver).emit('receiveMessage', newMessage);
});
socket.on('join', (email) => {
socket.join(email);
});
});
Comments
Post a Comment