import express from "express"; import gravatar from "gravatar"; import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; import config from "config"; import { check, validationResult } from "express-validator"; import User from "../../models/User"; import normalizeUrl from "normalize-url"; const router = express.Router(); // @route POST api/users // @desc Register user // @access Public router.post( "/", check("name", "Name is required").notEmpty(), check("email", "Please include a valid email").isEmail(), check( "password", "Please enter a password with 6 or more characters" ).isLength({ min: 6 }), async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const { name, email, password } = req.body; try { let user = await User.findOne({ email }); if (user) { return res .status(400) .json({ errors: [{ msg: "User already exists" }] }); } const avatar = normalizeUrl( gravatar.url(email, { s: "200", r: "pg", d: "mm", }), { forceHttps: true } ); user = new User({ name, email, avatar, password, }); const salt = await bcrypt.genSalt(10); user.password = await bcrypt.hash(password, salt); await user.save(); const payload = { user: { id: user.id, }, }; const jwtSecret = config.get('jwtSecret') if (typeof jwtSecret === 'string') jwt.sign( payload, jwtSecret, { expiresIn: "5 days" }, (err, token) => { if (err) throw err; res.json({ token }); } ); } catch (err: unknown) { if (typeof err === 'string') console.error(err) else if (err instanceof Error) console.error(err.message); res.status(500).send("Server error"); } } ); module.exports = router