๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[E-Commerce App with Fullstack] (2) MongoDB Setup & Register API ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Node js

[E-Commerce App with Fullstack] (2) MongoDB Setup & Register API

์ง•์ง•์•ŒํŒŒ์นด 2023. 4. 28. 18:44
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” Techinfo YT ์˜ ์œ ํŠœ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> Mern stack Ecommerce App Lets Build And Deploy Mern Stack Project full-stack development

 

โ˜˜๏ธ MongoDB Setup

๐Ÿ’š config/db.js

import mongoose from "mongoose";
import colors from "colors";

const connectDB = async () => {
  try {
    const conn = await mongoose.connect(process.env.MONGODB_URI);
    console.log(
      `Connected To Mongodb Database ${conn.connection.host}`.bgMagenta.white
    );
  } catch (error) {
    console.log(`Error in Mongodb ${error}`.bgRed.white);
  }
};

export default connectDB;

 

โ˜˜๏ธ auth Model Setup

๐Ÿ’š models/User.js

import mongoose from "mongoose";

const userSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
      trim: true,
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
    phone: {
      type: String,
      required: true,
    },
    address: {
      type: String,
      required: true,
    },
    role: {
      type: Number,
      default: 0,
    },
  },
  {
    timestamps: true,
  }
);

export default mongoose.model("users", userSchema);

 

โ˜˜๏ธ Hashing Password

๐Ÿ’š npm i bcrypt

๐Ÿ’š helpers/authHelper.js

import bcrypt from "bcrypt";

export const haspPassword = async (password) => {
  try {
    const salt = 10;
    const hashedPassword = await bcrypt.hash(password, salt);
    return hashedPassword;
  } catch (error) {
    console.log(error);
  }
};

export const comparePassword = async (password, hashedPassword) => {
  return bcrypt.compare(password, hashedPassword);
};

 

๐Ÿ’š controllers/authController.js

import { hashPassword } from "../helpers/authHelper.js";
import User from "../models/User.js";

export const registerController = async (req, res) => {
  try {
    const { name, email, password, phone, address } = req.body;

    // validation
    if (!name) {
      return res.send({ error: "Name is required!" });
    }
    if (!email) {
      return res.send({ error: "email is required!" });
    }
    if (!password) {
      return res.send({ error: "password is required!" });
    }
    if (!phone) {
      return res.send({ error: "phone is required!" });
    }
    if (!address) {
      return res.send({ error: "address is required!" });
    }

    // check user
    const existingUser = await User.findOne({ email });
    // existing user
    if (existingUser) {
      return res.status(200).send({
        success: true,
        message: "Already Register please login!",
      });
    }
    // register user
    const hashedPassword = await hashPassword(password);
    // save
    const user = new User({
      name,
      email,
      phone,
      address,
      password: hashedPassword,
    }).save();
    res.status(201).send({
      success: true,
      message: "User Register Successfully",
      user,
    });
  } catch (error) {
    console.log(error);
    res.status(500).send({
      success: false,
      message: "Error in Registeration",
      error,
    });
  }
};

 

๐Ÿ’šroutes/authRouter.js 

import express from "express";

// router object
const router = express.Router();
import { registerController } from "../controllers/authController.js";

// routing
// REGISTER || METHOD POST
router.post("/register", registerController);

export default router;

 

โ˜˜๏ธ Postman ์œผ๋กœ DB ๋“ค์–ด์˜ค๋Š” ๊ฑฐ ํ™•์ธํ•˜๊ธฐ

๐Ÿ’š server.js

import express from "express";
import colors from "colors";
import dotenv from "dotenv";
import morgan from "morgan";
import connectDB from "./config/db.js";

// router
import authRouter from "./routes/authRouter.js";

// configure env
dotenv.config();

// Databse config
connectDB();

// rest object
const app = express();

// middlewares
app.use(express.json());
app.use(morgan("dev"));

// routes
app.use("/api/v1/auth", authRouter);

// rest api
app.get("/", (req, res) => {
  res.send("<h>Welcome ecommerce app</h>");
});

// PORT
const PORT = process.env.PORT || 8000;

// run listen
app.listen(PORT, () => {
  console.log(
    `Server Running on ${process.env.DEV_MODE} http://localhost:${PORT}`.bgCyan
      .white
  );
});

 

728x90
๋ฐ˜์‘ํ˜•
Comments