[nodejs]간단한 회원가입 페이지 만들기 / Simple Create a simple membership registration page

회원가입 페이지를 만들기 위해서 post 데이터 전송 방식을 사용해야 합니다.
To create a membership registration page, you must use the post data transmission method.

먼저 이 포스트를 보기 전에 모듈 만들기 포스트를 먼저 보길 바랍니다.
Please read “Create a module” post first before reading this post.

1.npm 모듈 설치(npm module install)
-POST방식의 데이터 전송을 사용하기 위해서 body-parser모듈을 설치 합니다.
To use POST-type data transmission, you must install the body-parser module.

-package.son파일에서 모듈설치 상태를 확인합니다.
Check the module installation status in the package.son file.

2.코드설명(Code explanation)
– server.js파일을 작성합니다. / Write sever.js

– body-parser코드를 입력합니다. / Enter the body-parser code.

– { extended: false }는 false로 셋팅합니다. true이면 get방식을 위해서 다른 모듈을 사용해야 합니다.
{ extended: false } is set to false. If true, another module must be used for the get method.

-app.get에서 memberInput.ejs파일을 불러 옵니다.
-Load the memberInput.ejs file from app.get.

– app.post()는 post데이터를 받기 위한 라우터 입니다.
app.post() is a router for receiving post data.

-req.body.[userid,username,password]에서 body는 post데이터를 받기 위한 부분입니다.
In req.body.[userid,username,password], body is the part to receive post data.

– userInsert()함수의 동기적인 작동을 위해서 async(req, res)키워드를 사용합니다.
For synchronous operation of the userInsert() function, use the async(req, res) keyword.

-오류발생을 캐치하기 위해서 try ~ catch 구문을 사용합니다.
Use the try ~ catch statement to catch error occurrences.

-전달 받은 post데이터를 mysql db에 저장하고 해당 변수를 test.ejs 파일에 전달합니다
Save the received post data in mysql db and pass the corresponding variable to the test.ejs file.

-mysql database

-나머지는 아래 전체 코드와 이전 포스트를 참조하세요
For the rest, see the full code below and the previous post.

3.브라우저 테스트 /browser test
– [your doamin or host name]:3000/memberinput

실행결과(Execution result)

4.전체코드(full code) – server.js



//server.js --> Commonjs type
const { createServer } = require('http');
const ejs = require('ejs'); //ejs
const express = require('express'); //express
const path = require('path'); //path
const mysql = require('mysql2'); // mysql
var bodyParser = require('body-parser'); // post method 

const app = express();
const server = createServer(app);

// ejs settings
//-----------------------------------------------
app.set('view engine','ejs');
app.set('views','./public');

//bodyParser
app.use(bodyParser.urlencoded({ extended: false }));

// Serve static files from the 'public' directory
app.use(express.static(path.join(__dirname, "public")));

//-----------------------------------------------
// mysql db information
const dbname = "your_db_name";
const hostname = "localhost";
const dbuser = "your_db_user";
const dbpassword = "your_db_password";

// module import
const {
  userInsert,
} = require("./mysqldb");



/*---------------------------------------------------------------------------
  member
---------------------------------------------------------------------------*/

// memberInput.ejs 불러오기 / Load login.ejs
app.get("/memberinput", (req, res) => {

  res.render('memberInput');
      
});

// 회원가입 / join the membership
app.post("/join", async(req, res) => {

  // post method
  var userid = req.body.userid;
  var username = req.body.username;
  var postPassword = req.body.password;

  const connection = mysql.createConnection({
    host     : hostname,
    user     : dbuser,
    password : dbpassword,
    database : dbname
  });
  
 
  try{
    // db insert
    await userInsert(hostname, dbuser, dbpassword, dbname, userid,postPassword,username)
    // load test.ejs
    res.render('test',{message:userid,message2:postPassword,message3:username});

  }catch(error){
    // print error message
    console.error('Error fetching data:', error);
    res.status(500).send('Internal Server Error');

  }

});


//-----------------------------------------------


// Start the server
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

전체코드(full code) – mysqldb.js

const mysql = require('mysql2'); // 

async function userInsert(hostname, dbuser, dbpassword, dbname, userid,password,name) {
    const connection = mysql.createConnection({
        host: hostname,
        user: dbuser,
        password: dbpassword,
        database: dbname
    });

    return new Promise((resolve, reject) => {
        var sql = 'INSERT INTO user(userid,password,name) values(?,?,?)';
        var values = [userid,password,name];
        connection.query(sql, values, (error, rows) => {
            if (error) {
                reject(error);
            } else {
                resolve(rows);
            }
        });
    }).finally(() => {
        connection.end((err) => {
            if (err) {
                console.error('Error closing the connection:', err);
            } else {
                //
            }
        });
    });
}
module.exports = { userInsert };

전체코드(full code) – /public/memberInput.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .input-div {
            border: 0px solid black;
            margin-top: 100px;
            margin-bottom: 100px;
            margin-right: 150px;
            margin-left: 80px;
        }
    </style>
    <!-- Latest compiled and minified CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Latest compiled JavaScript -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
    <title>member</title>
</head>
<body>

    <header style="margin-left: 10px;">
        <nav>
            <!--menu area empty//--->
        </nav>
    </header>
    

<div class="input-div">
    <h1>MEMBER INPUT</h1>
    <form action="/join" method="post">
        <div>
                <label for="title-label" class="form-label">ID:</label>
                <input type="text" name="userid" class="form-control" required>
        </div>
        <div>
            <label for="title-label" class="form-label">NAME:</label>
            <input type="text" name="username" class="form-control" required>
    </div>
        <div>
            <label for="title-label" class="form-label">PASSWORD:</label>
            <input type="password" name="password" class="form-control" required>
    </div>
                <button class="btn btn-primary">submit</button>
    </form>
</div>


<footer>
    <!--empty-->
</footer>

</body>
</html>

전체코드( full code ) – test.ejs

userid: <%=message%> <br>
password : <%=message2%> <br>
name : <%=message3%>

Leave a Reply

Your email address will not be published. Required fields are marked *