Node.js와 Mongodb로 회원가입을 구현하려 합니다.

조회수 588회

안녕하세요 다름이 아니라
node.js와 mongoDB로 회원가입을 구현하려고 코드를 짜는 중인데,
계속 username과 password를 가져오지를 못해서 질문 드립니다.
비전공자 두명이서 고민해도 도대체 무엇이 문제인지 알 수가 없네요 ㅠㅠ

우선, register.ejs 파일입니다.

<body>
    <div class="center">
        <h1>회 원 가 입</h1>
        <form action= "/users/register" method="POST" enctype="multipart/form-data">

            <div class="txt_field">
                <input type="text" id="username" name="username" required>
                <span></span>
                <label>Username</label>
            </div>

            <div class="txt_field">
                <input type="password" id="password" name="password" required>
                <span></span>
                <label>Password</label>
            </div>

            <input type="submit" value="Register" id="sendMassageButton">

        </form>
    </div>
</body>

storeUser.js입니다.

const User = require('../models/User.js')
const path = require('path')

module.exports = (req,res) =>{
    User.create(req.body, (error, user)=>{
        res.redirect('/')
    })
}

User.js 입니다.

const mongoose = require('mongoose')

const UserSchema = new mongoose.Schema({
    username: String,
    password: String
});


//export model
const User = mongoose.model('User',UserSchema);

module.exports = User

마지막으로 index.js 입니다.

const express = require('express')
const app = new express()

const mongoose = require('mongoose');
const path = require('path')

const storeUserController = require('./controllers/storeUser')

mongoose.connect('mongodb://localhost/user_database',{
    useNewUrlParser: true,
    useUnifiedTopology: true});


const ejs = require('ejs')

app.set('view engine','ejs')
app.use(express.static('public'))

app.listen(4000, ()=>{
    console.log('App listening on port 4000')
})


app.get('/',(req,res)=>{
    res.render('index');
})

app.post('/users/register',storeUserController)

도대체 뭐가 문제일까요 ..ㅠㅠㅠㅠ register 버튼을 누르면 mongoDB에 뭐가 저장되기는 하는데... 텅텅 비어있습니다...

뭔가 register.ejs에 있는 text상자에서 username과 password를 못가져오는 거 같은데 왜이러는지 진짜 답답해서 미칠거같네요...

이미지

위에 두개는 test.js를 따로 만들어서 임의로 저장해 본 것입니다.
register 버튼을 누르면 제일 마지막처럼 이상한 녀석만 뜹니다..
ejs에서 뭔가 문제가 있는거 같은데 도대체 왜이러나요 흑흑 ... 도와주십셔...

1 답변

  • express는 잘 모르긴 하는데... 높은 확률로 얘 때문입니다. 이걸 지우고 다시 해보세요.

     enctype="multipart/form-data"
    

    추정의 근거를 시시콜콜 늘어놓자면, HTML 폼에서 얘를 넣지 않은 기본적인 POST 폼은 application/x-www-formurlencoded 밈타입으로 전송이 되고, '파일 첨부'를 해야 한다거나 해서 굳이 집어넣은 폼은 multipart/form-data 밈타입으로 전송이 되는데, 둘은 요청본문 값을 까서 쓰는 방법이 약간 다르고, 구현 중이신 스택은 아마도 요청이 전자로 들어올 것으로 전제하고 있을 확률이 커서 그렇습니다. 내용이 '텅 비어있다'는 건 그래서일 수 있어요.

    암튼 해보시고 안 되면 다시 알려주세요.

    • 친절한 답변 감사합니다..! enctype="multipart/form-data"를 제거하였는데... 그래도 저장이 여전히 비어있는채로 되네요.. ㅠㅠ 알 수 없는 사용자 2021.6.6 14:25
    • storeUser.js 에서 console.log(req.body) 찍으면 뭐 나오나요? 그거를 추가해서 질문글 수정해 주실수 있나요? 엽토군 2021.6.6 14:29
    • console.log(req,body) 찍으니까 아예 오류가 나버리네요.. 알 수 없는 사용자 2021.6.6 15:12
    • 아...! mongodb를 다시 설치했더니 갑자기 문제가 해결되었습니다.. ㅠㅠㅠ 여러모로 도와주셔서 감사합니다 ㅠㅠ 알 수 없는 사용자 2021.6.6 15:15

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)