authController
const { User } = require("../models/post");
const bcrypt = require("bcryptjs");
const { validationResult } = require("express-validator");
const jwt = require("jsonwebtoken");
const { SECRET_KEY } = process.env;
const generateAccessToken = (id) => {
const payload = {
id,
};
return jwt.sign(payload, SECRET_KEY, { expiresIn: "24h" });
};
class authController {
async registration(req, res) {
try {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ message: "Некорректные данные" });
}
const { login, password, name } = req.body;
const candidate = await User.findOne({ where: { login } });
if (candidate) {
return res
.status(400)
.json({ message: "Такой пользователь уже существует" });
}
const hashPassword = bcrypt.hashSync(password, 7);
// const userRole = await Role.findOne({ where: { value: "Админ" } });
const user = await User.create({
name,
login,
password: hashPassword,
});
await user.save();
return res.json("Пользователь создан");
} catch (e) {
console.error(e);
res.status(500).json({ error: "Произошла ошибка при регистрации" });
}
}
async login(req, res) {
try {
const { login, password } = req.body;
const user = await User.findOne({ where: { login } });
if (user == "" || password == "") {
return res.status(400).json({ message: "Заполните все поля" });
}
if (!user) {
return res
.status(400)
.json({ message: `Пользователь ${login} не найден` });
}
const validPassword = bcrypt.compareSync(password, user.password);
if (!validPassword) {
return res.status(400).json({ message: "Неверный пароль" });
}
// if (password !== user.password) {
// return res.status(400).json({ message: "Неверный пароль" });
// }
const token = generateAccessToken(user.id);
return res.json({ token });
} catch (e) {}
}
catch(e) {
console.log(e);
res.status(400).json({ message: "Login error" });
}
async getUsers(req, res) {
try {
const users = await User.findAll();
res.json(users);
} catch (e) {
console.error(e);
res.status(500).json({ error: "Произошла ошибка при создании роли" });
}
}
async getUser(req, res) {
try {
const user = await User.findOne({ where: { id: req.params.id } });
res.json(user);
} catch (e) {
console.error(e);
res.status(500).json({ error: "1" });
}
}
async deleteUser(req, res) {
const user = await User.destroy({
where: {
id: req.params.id,
},
});
return res.json(user);
}
async auth(req, res) {
try {
const user = await User.findOne({ where: { id: req.user.id } });
const token = generateAccessToken(user.id);
return res.json({
token,
user: {
id: user.id,
name: user.name,
login: user.login,
password: user.password,
},
});
} catch (e) {
console.log(e);
res.send({ message: "Server error" });
}
}
}
module.exports = new authController();
post controller
const { where } = require("sequelize");
const { Post } = require("../models/post");
class PostController {
async addPost(req, res) {
const { title, body } = req.body;
const post = await Post.create({
title,
body,
});
return res.json(post);
}
async getPost(req, res) {
const post = await Post.findAll();
return res.json(post);
}
async deletePost(req, res) {
const post = await Post.destroy({ where: { id: req.params.id } });
return res.json(post);
}
async putPost(req, res) {
const { title, body } = req.body;
const post = await Post.update(
{
title: title,
body: body,
},
{ where: { id: req.params.id } }
);
return res.json(post);
}
}
module.exports = new PostController();
Db.js
const { Sequelize } = require("sequelize");
module.exports = new Sequelize(
process.env.DB_NAME,
process.env.DB_USER,
process.env.DB_PASSWORD,
{
dialect: "postgres",
host: process.env.DB_HOST,
port: process.env.DB_PORT,
}
);
index.js
require("dotenv").config();
const express = require("express");
const sequelize = require("./db");
const bodyParser = require("body-parser");
const cors = require("cors");
const router = require("./router/index");
const PORT = process.env.PORT || 5001;
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
app.use(express.json());
app.use("/api", router);
const start = async () => {
try {
await sequelize.authenticate();
await sequelize.sync();
app.listen(PORT, () => console.log(`SERVER STARTED ON PORT ${PORT}`));
} catch (e) {
console.log(e);
}
};
start();
models
const { Sequelize, DataTypes } = require("sequelize");
const sequelize = require("../db");
const Post = sequelize.define("post", {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
title: { type: DataTypes.STRING },
body: { type: DataTypes.STRING },
});
const User = sequelize.define("user", {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
name: { type: DataTypes.STRING },
login: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
});
module.exports = { Post, User };
AuthRouter
const Router = require("express");
const { check } = require("express-validator");
const router = new Router();
const authController = require("../controllers/authController");
router.post(
"/registration",
[
check("login").isLength({ min: 3, max: 25 }),
check("password").isLength({ min: 3, max: 25 }),
],
authController.registration
);
router.post("/login", authController.login);
router.get("/auth", authController.auth);
router.get("/user", authController.getUsers);
router.get("/user", authController.getUser);
router.delete("/user/:id", authController.deleteUser);
module.exports = router;
index router
const Router = require("express");
const router = new Router();
const postRouter = require("./postRouter");
const authRouter = require("./authRouter");
router.use("/posts", postRouter);
router.use("/auth", authRouter);
module.exports = router;
const Router = require("express");
post router
const router = new Router();
const postController = require("../controllers/postController");
router.post("/", postController.addPost);
router.get("/", postController.getPost);
router.delete("/:id", postController.deletePost);
router.put("/:id", postController.putPost);
module.exports = router;
npm init -y
npm i express sequelize pg pg-hstore body-parser cors dotenv nodemon —save