ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Sign up - Controller
    Project using node.js/Cloning Catch-Mind 2020. 12. 13. 19:13

    Mongo DB

    // db.js
    
    import mongoose from "mongoose";
    
    mongoose.connect(process.env.MONGO_URL, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useFindAndModify: false,
    });
    
    const db = mongoose.connection;
    
    const handleOpen = () => console.log(`✅ Connected to DB`);
    const handleError = (error) => console.log(`❌ Connection ${error}`);
    
    mongoose.set("useCreateIndex", true);
    
    db.on("error", handleError);
    db.once("open", handleOpen);

      회원 가입 기능을 구현하기 위해 passport 모듈을 사용할 것이다. 그리고 생성된 계정을 mongo DB에 저장할 것이다. 그러기 위해서 db.js 라는 파일을 생성해서 위처럼 코드를 짠다.

    // User.js
    
    import mongoose from "mongoose";
    import passportLocalMongoose from "passport-local-mongoose";
    
    const UserSchema = new mongoose.Schema({
      name: String,
      email: String,
      avatarUrl: String,
    });
    
    UserSchema.plugin(passportLocalMongoose, { usernameField: "username" });
    
    const model = mongoose.model("User", UserSchema);
    
    export default model;

      Mongo DB는 스키마를 작성해야 한다. User.js에 짜여진 스키마 대로 계정(User)이 저장된다. 여기서 UserSchema.plugin(passportLocalMongoose, {usernameField: "username"});은 passport-local-mongoose를 이용해서 회원 가입을 하는 유저 계정을 손쉽게 저장할 수 있도록 도와주는 plugin이다.

    avatar-image

    회원 가입을 할 때, avatar-image도 추가할 것이다.

    // middlewares.js
    
    import dotenv from "dotenv";
    import multer from "multer";
    
    dotenv.config();
    
    const multerAvatar = multer({ dest: "uploads/avatars" });
    
    export const uploadAvatar = multerAvatar.single("avatar");

      middlewares.js에 추가된 코드다. multer를 이용해서 image나 video 파일을 저장할 수 있다. 그리고 dotenv를 이용해서 외부에 노출되면 안 되는 정보를 .env 파일에 저장하고 dotenv.config()를 이용해서 사용할 수 있다.

    // globalRouter.js
    
    import express from "express";
    import routes from "../../routes";
    import { postSignUp } from "../controller/globalController";
    import { uploadAvatar } from "../middlewares";
    
    const globalRouter = express.Router();
    
    // sign-up
    globalRouter.post(routes.signUp, uploadAvatar, postSignUp);
    
    export default globalRouter;

    uploadAvatar가 routes.signUp과 postSignUp 사이에 있다. user가 avatar 파일을 업로드하면 그 파일이 postSignUp에 전해진다.

    // signUp.pug
    
    form(action=routes.signUp, method="post" enctype="multipart/form-data")
          .fileUpload
            label(for="avatar") Avatar
            input(type="file", name="avatar", id="avatar", accept="image/*")

    signUp.pug의 form 추가된 코드다. multer를 사용하려면 form에 enctype="multipart/form-data"을 추가해야 한다.

    소스 코드

    github.com/zpskek/guessMind-v3/commit/e62b0a31850babae9638838d804abcca763ee5a2

    'Project using node.js > Cloning Catch-Mind' 카테고리의 다른 글

    Logout  (0) 2020.12.14
    login on Catch Mind  (0) 2020.12.13
    Show sign up and login pages  (0) 2020.12.13
    Server setup  (0) 2020.12.12
    환경설정  (0) 2020.12.12

    댓글

Designed by Tistory.