UNPKG

kickstart-express

Version:

A powerful CLI tool to quickly scaffold Express.js projects with modern tooling and best practices

91 lines (82 loc) 2.85 kB
import express from "express"; import dotenv from "dotenv"; import { authMiddleware } from "../middleware/auth.js"; import { generateToken, hashPassword, comparePassword } from "../utils/auth.js"; dotenv.config(); const app = express(); app.use(express.json()); // Example: Public route (no authentication required) app.get("/public", (req, res) => { res.json({ message: "This is a public route accessible to everyone" }); }); // Example: Login route (generates JWT token) app.post("/login", async (req, res) => { try { const { email, password } = req.body; // Here you would typically: // 1. Find user in database by email // 2. Compare password with stored hash // For example purposes, we'll use dummy data const storedPasswordHash = "$2a$12$example.hash"; // Get from database const isValidPassword = await comparePassword(password, storedPasswordHash); if (!isValidPassword) { return res.status(401).json({ error: "Invalid credentials" }); } // Generate token with user data const token = generateToken({ userId: "user123", email: email, role: "user", }); res.json({ message: "Login successful", token: token, user: { userId: "user123", email: email }, }); } catch (error) { res.status(500).json({ error: "Login failed" }); } }); // Example: Register route (creates new user with hashed password) app.post("/register", async (req, res) => { try { const { email, password } = req.body; // Hash the password before storing const hashedPassword = await hashPassword(password); // Here you would store the user in your database // const user = await User.create({ email, password: hashedPassword }); res.json({ message: "User registered successfully", user: { email: email }, }); } catch (error) { res.status(500).json({ error: "Registration failed" }); } }); // Example: Protected route (requires authentication) app.get("/protected", authMiddleware, (req, res) => { res.json({ message: "This is a protected route", user: req.user, }); }); // Example: Protected route with role check app.get("/admin", authMiddleware, (req, res) => { if (req.user.role !== "admin") { return res.status(403).json({ error: "Admin access required" }); } res.json({ message: "Admin-only content", user: req.user, }); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); console.log("Available routes:"); console.log(" GET /public - Public route"); console.log(" POST /login - Login and get token"); console.log(" POST /register - Register new user"); console.log(" GET /protected - Protected route (requires token)"); console.log(" GET /admin - Admin-only route"); });