{"id":828,"date":"2024-08-27T03:31:20","date_gmt":"2024-08-27T03:31:20","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=828"},"modified":"2024-08-28T13:33:52","modified_gmt":"2024-08-28T13:33:52","slug":"nodejs-simple-create-a-simple-membership-registration-page","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/08\/27\/nodejs-simple-create-a-simple-membership-registration-page\/","title":{"rendered":"[nodejs]\uac04\ub2e8\ud55c \ud68c\uc6d0\uac00\uc785 \ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30 \/ Simple Create a simple membership registration page"},"content":{"rendered":"\n<p>\ud68c\uc6d0\uac00\uc785 \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574\uc11c post \ub370\uc774\ud130 \uc804\uc1a1 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<br>To create a membership registration page, you must use the post data transmission method.<\/p>\n\n\n\n<p>\uba3c\uc800 \uc774 \ud3ec\uc2a4\ud2b8\ub97c \ubcf4\uae30 \uc804\uc5d0 <a rel=\"noreferrer noopener\" href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/08\/20\/nodejs-create-a-module\/\" data-type=\"URL\" data-id=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/08\/20\/nodejs-create-a-module\/\" target=\"_blank\">\ubaa8\ub4c8 \ub9cc\ub4e4\uae30 \ud3ec\uc2a4\ud2b8<\/a>\ub97c \uba3c\uc800 \ubcf4\uae38 \ubc14\ub78d\ub2c8\ub2e4.<br>Please read &#8220;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/08\/20\/nodejs-create-a-module\/\" data-type=\"URL\" data-id=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/08\/20\/nodejs-create-a-module\/\" target=\"_blank\">Create a module<\/a>&#8221; post first before reading this post.<\/p>\n\n\n\n<p><strong>1.npm \ubaa8\ub4c8 \uc124\uce58(npm module install)<\/strong><br>-POST\ubc29\uc2dd\uc758 \ub370\uc774\ud130 \uc804\uc1a1\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c body-parser\ubaa8\ub4c8\uc744 \uc124\uce58 \ud569\ub2c8\ub2e4.<br>To use POST-type data transmission, you must install the body-parser module.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"238\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/body-parser.png\" alt=\"\" class=\"wp-image-838\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/body-parser.png 695w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/body-parser-300x103.png 300w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/figure>\n\n\n\n<p>-package.son\ud30c\uc77c\uc5d0\uc11c \ubaa8\ub4c8\uc124\uce58 \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4.<br>Check the module installation status in the package.son file.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"326\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/package_json.png\" alt=\"\" class=\"wp-image-839\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/package_json.png 604w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/package_json-300x162.png 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/figure>\n\n\n\n<p><strong>2.\ucf54\ub4dc\uc124\uba85(Code explanation)<\/strong><br>&#8211; server.js\ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4. \/ Write sever.js<\/p>\n\n\n\n<p>&#8211; body-parser\ucf54\ub4dc\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \/ Enter the body-parser code.<\/p>\n\n\n\n<p>&#8211; { extended: false }\ub294 false\ub85c \uc14b\ud305\ud569\ub2c8\ub2e4. true\uc774\uba74 get\ubc29\uc2dd\uc744 \uc704\ud574\uc11c  \ub2e4\ub978 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<br>{ extended: false } is set to false. If true, another module must be used for the get method.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"461\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js1.png\" alt=\"\" class=\"wp-image-840\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js1.png 518w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js1-300x267.png 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/figure>\n\n\n\n<p>-app.get\uc5d0\uc11c memberInput.ejs\ud30c\uc77c\uc744 \ubd88\ub7ec \uc635\ub2c8\ub2e4.<br>-Load the memberInput.ejs file from app.get.<\/p>\n\n\n\n<p>&#8211; app.post()\ub294  post\ub370\uc774\ud130\ub97c \ubc1b\uae30 \uc704\ud55c \ub77c\uc6b0\ud130 \uc785\ub2c8\ub2e4.<br>app.post() is a router for receiving post data.<\/p>\n\n\n\n<p>-req.body.[userid,username,password]\uc5d0\uc11c body\ub294 post\ub370\uc774\ud130\ub97c \ubc1b\uae30 \uc704\ud55c \ubd80\ubd84\uc785\ub2c8\ub2e4.<br>In req.body.[userid,username,password], body is the part to receive post data.<\/p>\n\n\n\n<p>&#8211; userInsert()\ud568\uc218\uc758 \ub3d9\uae30\uc801\uc778 \uc791\ub3d9\uc744 \uc704\ud574\uc11c async(req, res)\ud0a4\uc6cc\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>For synchronous operation of the userInsert() function, use the async(req, res) keyword.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"894\" height=\"534\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js2-1.png\" alt=\"\" class=\"wp-image-845\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js2-1.png 894w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js2-1-300x179.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js2-1-768x459.png 768w\" sizes=\"auto, (max-width: 894px) 100vw, 894px\" \/><\/figure>\n\n\n\n<p>-\uc624\ub958\ubc1c\uc0dd\uc744 \uce90\uce58\ud558\uae30 \uc704\ud574\uc11c try ~ catch \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>Use the try ~ catch statement to catch error occurrences.<\/p>\n\n\n\n<p>-\uc804\ub2ec \ubc1b\uc740 post\ub370\uc774\ud130\ub97c mysql db\uc5d0 \uc800\uc7a5\ud558\uace0 \ud574\ub2f9 \ubcc0\uc218\ub97c test.ejs \ud30c\uc77c\uc5d0  \uc804\ub2ec\ud569\ub2c8\ub2e4<br>Save the received post data in mysql db and pass the corresponding variable to the test.ejs file.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"739\" height=\"309\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js3-1.png\" alt=\"\" class=\"wp-image-846\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js3-1.png 739w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/server_js3-1-300x125.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/figure>\n\n\n\n<p>-mysql database<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"406\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/mysql.png\" alt=\"\" class=\"wp-image-858\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/mysql.png 679w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/mysql-300x179.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure>\n\n\n\n<p>-\ub098\uba38\uc9c0\ub294 \uc544\ub798 \uc804\uccb4 \ucf54\ub4dc\uc640 \uc774\uc804 \ud3ec\uc2a4\ud2b8\ub97c \ucc38\uc870\ud558\uc138\uc694<br>For the rest, see the full code below and the previous post.<\/p>\n\n\n\n<p><strong>3.\ube0c\ub77c\uc6b0\uc800 \ud14c\uc2a4\ud2b8 \/browser test<\/strong><br>&#8211; [your doamin or host name]:3000\/memberinput<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/memberinput.png\" alt=\"\" class=\"wp-image-853\"\/><\/figure>\n\n\n\n<p>&#8211;<strong>\uc2e4\ud589\uacb0\uacfc(Execution result)<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"352\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/join.png\" alt=\"\" class=\"wp-image-854\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/join.png 534w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/08\/join-300x198.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n\n\n\n<p><strong>4.\uc804\uccb4\ucf54\ub4dc(full code) &#8211; server.js<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\n\/\/server.js --&gt; Commonjs type\nconst { createServer } = require('http');\nconst ejs = require('ejs'); \/\/ejs\nconst express = require('express'); \/\/express\nconst path = require('path'); \/\/path\nconst mysql = require('mysql2'); \/\/ mysql\nvar bodyParser = require('body-parser'); \/\/ post method \n\nconst app = express();\nconst server = createServer(app);\n\n\/\/ ejs settings\n\/\/-----------------------------------------------\napp.set('view engine','ejs');\napp.set('views','.\/public');\n\n\/\/bodyParser\napp.use(bodyParser.urlencoded({ extended: false }));\n\n\/\/ Serve static files from the 'public' directory\napp.use(express.static(path.join(__dirname, \"public\")));\n\n\/\/-----------------------------------------------\n\/\/ mysql db information\nconst dbname = \"your_db_name\";\nconst hostname = \"localhost\";\nconst dbuser = \"your_db_user\";\nconst dbpassword = \"your_db_password\";\n\n\/\/ module import\nconst {\n  userInsert,\n} = require(\".\/mysqldb\");\n\n\n\n\/*---------------------------------------------------------------------------\n  member\n---------------------------------------------------------------------------*\/\n\n\/\/ memberInput.ejs \ubd88\ub7ec\uc624\uae30 \/ Load login.ejs\napp.get(\"\/memberinput\", (req, res) =&gt; {\n\n  res.render('memberInput');\n      \n});\n\n\/\/ \ud68c\uc6d0\uac00\uc785 \/ join the membership\napp.post(\"\/join\", async(req, res) =&gt; {\n\n  \/\/ post method\n  var userid = req.body.userid;\n  var username = req.body.username;\n  var postPassword = req.body.password;\n\n  const connection = mysql.createConnection({\n    host     : hostname,\n    user     : dbuser,\n    password : dbpassword,\n    database : dbname\n  });\n  \n \n  try{\n    \/\/ db insert\n    await userInsert(hostname, dbuser, dbpassword, dbname, userid,postPassword,username)\n    \/\/ load test.ejs\n    res.render('test',{message:userid,message2:postPassword,message3:username});\n\n  }catch(error){\n    \/\/ print error message\n    console.error('Error fetching data:', error);\n    res.status(500).send('Internal Server Error');\n\n  }\n\n});\n\n\n\/\/-----------------------------------------------\n\n\n\/\/ Start the server\nconst PORT = process.env.PORT || 3000;\nserver.listen(PORT, () =&gt; {\n  console.log(`Server is running on port ${PORT}`);\n});\n<\/code><\/pre>\n\n\n\n<p><strong>\uc804\uccb4\ucf54\ub4dc(full code) &#8211; mysqldb.js<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const mysql = require('mysql2'); \/\/ \n\nasync function userInsert(hostname, dbuser, dbpassword, dbname, userid,password,name) {\n    const connection = mysql.createConnection({\n        host: hostname,\n        user: dbuser,\n        password: dbpassword,\n        database: dbname\n    });\n\n    return new Promise((resolve, reject) =&gt; {\n        var sql = 'INSERT INTO user(userid,password,name) values(?,?,?)';\n        var values = &#91;userid,password,name];\n        connection.query(sql, values, (error, rows) =&gt; {\n            if (error) {\n                reject(error);\n            } else {\n                resolve(rows);\n            }\n        });\n    }).finally(() =&gt; {\n        connection.end((err) =&gt; {\n            if (err) {\n                console.error('Error closing the connection:', err);\n            } else {\n                \/\/\n            }\n        });\n    });\n}\nmodule.exports = { userInsert };<\/code><\/pre>\n\n\n\n<p><strong>\uc804\uccb4\ucf54\ub4dc(full code) &#8211; \/public\/memberInput.ejs<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;style&gt;\n        .input-div {\n            border: 0px solid black;\n            margin-top: 100px;\n            margin-bottom: 100px;\n            margin-right: 150px;\n            margin-left: 80px;\n        }\n    &lt;\/style&gt;\n    &lt;!-- Latest compiled and minified CSS --&gt;\n    &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"&gt;\n    &lt;!-- Latest compiled JavaScript --&gt;\n    &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/js\/bootstrap.bundle.min.js\"&gt;&lt;\/script&gt;\n    &lt;title&gt;member&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n    &lt;header style=\"margin-left: 10px;\"&gt;\n        &lt;nav&gt;\n            &lt;!--menu area empty\/\/---&gt;\n        &lt;\/nav&gt;\n    &lt;\/header&gt;\n    \n\n&lt;div class=\"input-div\"&gt;\n    &lt;h1&gt;MEMBER INPUT&lt;\/h1&gt;\n    &lt;form action=\"\/join\" method=\"post\"&gt;\n        &lt;div&gt;\n                &lt;label for=\"title-label\" class=\"form-label\"&gt;ID:&lt;\/label&gt;\n                &lt;input type=\"text\" name=\"userid\" class=\"form-control\" required&gt;\n        &lt;\/div&gt;\n        &lt;div&gt;\n            &lt;label for=\"title-label\" class=\"form-label\"&gt;NAME:&lt;\/label&gt;\n            &lt;input type=\"text\" name=\"username\" class=\"form-control\" required&gt;\n    &lt;\/div&gt;\n        &lt;div&gt;\n            &lt;label for=\"title-label\" class=\"form-label\"&gt;PASSWORD:&lt;\/label&gt;\n            &lt;input type=\"password\" name=\"password\" class=\"form-control\" required&gt;\n    &lt;\/div&gt;\n                &lt;button class=\"btn btn-primary\"&gt;submit&lt;\/button&gt;\n    &lt;\/form&gt;\n&lt;\/div&gt;\n\n\n&lt;footer&gt;\n    &lt;!--empty--&gt;\n&lt;\/footer&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p><strong>\uc804\uccb4\ucf54\ub4dc( full code ) &#8211; test.ejs<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>userid: &lt;%=message%&gt; &lt;br&gt;\npassword : &lt;%=message2%&gt; &lt;br&gt;\nname : &lt;%=message3%&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ud68c\uc6d0\uac00\uc785 \ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574\uc11c post \ub370\uc774\ud130 \uc804\uc1a1 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.To create a membership registration page, you must use the post data transmission method. \uba3c\uc800 \uc774 \ud3ec\uc2a4\ud2b8\ub97c \ubcf4\uae30 \uc804\uc5d0 \ubaa8\ub4c8 \ub9cc\ub4e4\uae30 \ud3ec\uc2a4\ud2b8\ub97c \uba3c\uc800 \ubcf4\uae38 \ubc14\ub78d\ub2c8\ub2e4.Please read &#8220;Create a module&#8221; post first before reading this post. 1.npm \ubaa8\ub4c8 \uc124\uce58(npm module install)-POST\ubc29\uc2dd\uc758 \ub370\uc774\ud130 \uc804\uc1a1\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c body-parser\ubaa8\ub4c8\uc744 \uc124\uce58 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,1],"tags":[],"class_list":["post-828","post","type-post","status-publish","format-standard","hentry","category-nodejs","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=828"}],"version-history":[{"count":18,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/828\/revisions"}],"predecessor-version":[{"id":880,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/828\/revisions\/880"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}