Cookbook สอน NodeJS กับ Express Ver. เด็ก Java สู่ NodeJS

Supakorn Trakulmaiphol
Alchemist
Published in
7 min readAug 15, 2018

--

ผลการค้นหารูปภาพสำหรับ nodejs

Slide บรรยายพร้อม Source Code จาก Talk’n Chip ที่ KMITL

สำหรับการมาเริ่มต้นที่ Express หลายๆคนอาจจะพอทราบมาว่า Express คือ Framework ของ NodeJS ที่สามารถใช้ในการทำ WebService อย่าง REST API ซึ่งเป้น Technology ที่นิยมใช้กันอยู่ในปัจจุบัน โดยส่วนตัวแล้วตอนผมเริ่มต้นมาใหม่ๆรู้สึกมึนๆงงๆกับชีวิต เพราะข้อมูลบางส่วนกระจายๆกันออกไป ก็เลยถือโอกาสอันดีรวม ปัญหาทุกอย่างที่เคยเจอ กับขั้นตอนการ setup พื้นฐานไปเลย ให้พร้อมใช้งานสำหรับ WebService ทั่วๆไปเช่น Cookie, Session, Route ต่างๆเป็นต้น ในส่วนเริ่มต้นขึ้นมาการจะใช้ NodeJS ได้ก็แสดงว่าอย่างน้อยเรา

ควรเข้าใจ ES5 + 6 พื้นฐาน ความแตกต่าง JSON VS Java Script Object

ลองดูพื้นฐานเรื่องของ NodeJS กับการสร้างโปรเจค

มาก่อนหรือจะ Feature บางอย่างที่ควรรู้เช่น Arrow Function , Async Await

ปิดท้ายด้วย Callback Function ถ้าพื้นฐานตรงนี้เข้าใจแล้วล่ะก็เราก็ไปต่อกันเล้ยยย ลองกดที่ลิ้งที่ผมให้ไปและตามอ่านได้เลยเน้ออ เพราะผมก็อ่านมาจากพี่ๆแถวนี้เหมือนกันน > <แบ่งปันของดีๆ อิๆ จบครบข้างบนแล้วเราก็ไปต่อข้างล่างกันได้

โดยขั้นตอนขั้นล่างนี้คือสิ่งที่ต้องใช้ทั้งหมดในการทำ Backend นั่นเองโดยผมได้รวบรวมปัญหาหลักๆที่ผมเจอมาหมดเอาไว้แล้ว บวกกับ feature พื้นฐานที่คิดว่าต้องมีแน่ๆในฝั่งโค้ด Backend เช่น session, redirect, route วิธีการค้นหาให้กดปุ่ม ctrl + f เลข [Feature] ตามด้วยคำที่จะหานะครับเพราะว่าเยอะมากกก

0 [Intro] Express / Middleware คืออะไร

Express นั้นเปรียบเสมือน Servlet บน Java/ ASP.net บน c# หรือ Framework บนภาษา Programming สำหรับทำพวก Web Service นั่นแหละครับเช่นเวลาที่ผู้ใช้เว็บเข้าเว็บเรามากดปุ่ม Login แล้วต้องส่งค่าอะไรกลับไปบ้าง ซึ่งแบบง่ายๆก็คือส่งนำค่าข้อมูลจากช่อง username, password ที่เป็น tag input สวยๆงามๆใน Frontend ส่งไปให้ Backend หลังบ้าน ก็นำค่าพวกนั้นไปเช็คใน Database ต่อ

ภาพจาก https://github.com/komushi/gnavi-mongo

ซึ่งตรง Web UI กับ MongoDB (Database) นั้นเป็นส่วนที่เราจะถอดเข้าถอดออกไปใช้ Techonology อะไรก็ได้เช่น WebUI (Frontend) เป็น VueJS, React ส่วน Database จะใช้ SQL อย่าง Oracle, MariaDB, Postgresql หรือฝั่ง NoSQL เช่น MongoDB, Firebase, อื่นๆ อีกมากมาย ก็ได้นั่นเองครับ ส่วน logic ก็มาอยู่ตรง express เรานั่นเอง ~

โดยตัวที่ต้องรู้จักก็คือ (ในภาคปฎิบัติอ่านของผมได้เลยส่วน ทฤษฎีกดที่ลิ้งค์)

Middleware นั้นเป็นด่านที่ต้องประมวลผลก่อนที่ล่ะชั้นๆ จนกว่าจะเข้าไปถึง request route api ที่ถูกเรียกใช้นั้นเอง ซึ่งจะเปรียบเสมือน Filter ใน Servlet ของ Java ที่ เราสามารถสร้าง Filter มาคั่นได้ก่อนที่จะถึง request แล้วก็ไป map เข้าไปใน path ของ servlet นั้นๆ แล้วถ้าถามว่ามันจะทำงานไปกี่ชั้น ?

ผลการค้นหารูปภาพสำหรับ middleware express
ตัวอย่าง Middleware ของ Express
Servlet Filter ใน Java Servlet

มันก็จะทำงานไปเรื่อยๆจนกว่า filter จะหมด เพราะว่าใน java มันจะมี Class Filter ที่ใช้เรียกตัวมันเองคล้ายๆกับ Callback บน Express เลยที่จะไปเรียก next()

ตัว Class FilterChain ก็เปรียบเสมือน callback next() ใน Middleware ของ Express ที่มันจะทำงานตามจำนวน Servlet ที่ถูก Map เอาไว้กับ Filter นั้นเองและเมื่อไรห่ก็ตามที่อยากให้ไปทำงานหลังจบ logic ก็ใช้เรียกใช้ตัวแปร chain.doFilter(req, res) นั้นเอง

ซึ่ง Middleware สามารถติดตั้งได้ตั้งแต่เฉพาะระดับ path route ของ api จนไปถึงลงไว้แบบ global ทุกตัวต้องถูกใช้งานโดนเราจะมี method ว่า app.use( -middleware-) เป็น parameter รับเข้ามานั้นเอง โดยตัวอย่างข้างล่างจะค่อยๆมีเพิ่มมาทีล่ะตัวๆอย่างช้าๆครับผม ~

ตระกูล app.use( middleware ) ทั้งหลายจะมีให้เลือกมากมายในโลกของ express

1 [Feature] การติดตั้ง express

ติดตั้ง express ด้วยคำสั่งบน terminal หรือใน vs code ด้วยคำสั่ง

npm install express โดยหลังจากติดตั้งก็ไปเช็คว่าติดตั้งถูกหรือไม่ใน package.json

สำหรับตัวอื่นอย่าง hbs, socket.io ก็คือ package อื่นๆที่ผมลงไว้เฉยๆนะครับไม่ต้องมีเหมือนกันก็ได้

ถ้าพบว่าใน dependencies มี express อยู่แสดงว่าพร้อมใช้งานแล้วนั่นเอง

2 [Feature] สร้าง Webserver ง่ายๆ

3 [Feature] สร้าง api route

API นั่นเป็นสิ่งที่ผมต้องเรียนรู้ใหม่เวลาลองทำให้ Web Technology สมัยใหม่เพราะสมัยก่อนที่ทำ JSP Servlet นั้นเราเขียน Class Java Servlet และต่อเข้าหากับ JSP ได้เลยผ่าน tag form ก็จะมี

Code HTML บน JSP

จะเห็นว่าเราจะต้องสร้าง Tag form ขึ้นมาครอบพวก tag input ต่างๆที่ใช้ในการส่งข้อมูลเช่นหน้านี้คือหน้าสำหรับค้นหารายการสิ้นค้านั่นเองโดย action จะส่งไปหา Servlet โดยอัตโนมัติซึ่งชื่อของ Servlet นั้นจะขึ้นกับที่เราตั้งขึ้นมาเองใน web.xml

ซึ่ง URL- Pattern ก็คือการทำงานเหมือนกันเลยนั่นเองมันคือชื่อที่เราตั้งขึ้นมาเองจะชื่ออะไรก็ได้แต่ต้องเรียกให้ถูกชื่อนั่นเอง

โดย path ใน express ก็เหมือนกันครับ เราจะตั้งลึกๆเข้าไปอะไรอย่างไรตามใจเราก็ได้นั่นเอง

โดยตัวแปร app ของเราแล้วสามารถเลือก method ของ http ได้ซึ่งจะมี หลักที่ใช้ในการออกแบบของ REST api โดยอย่างง่ายๆเช่น get method คือเป็นหน้าข้อมูลทั่วๆไปไมไ่ด้มีความลับอะไรใช้ในการแสดงผลเฉยๆ เพราะสามารถดูผ่าน url ในเว็บไซต์ทั่วๆไปได้เลย หากไม่ได้ทำระบบ session หรือ authen ในการยืนยันตัวตน

เราใช้ POSTMAN เป็นตัวเทสว่า API ทำงานได้หรือไม่

แต่ถ้าเป็นหน้า login มีการยืนยันตัวตนส่งรหัสผ่านอะไรสักอย่างเราก็ควรทำผ่าน post method นั่นเอง หรือลบข้อมูลออกจาก DB ก็จะใช้ delete ซึ่งจริงๆถ้าถามว่า get สามารถลบได้มั้ย ? คำตอบก็คือสามารถทำได้ เพราะคนที่เขียนไส้ในสุดท้ายก็คือเรา ว่าเราออกแบบมันอย่างไร แต่เราก็ไม่ควรทำ ! เพราะว่าทำให้สับสนต่อคนอื่นๆที่มาทำงานกับเรานั่นเองครับผม เหมือนทุกคนใช้สัญลักณ์เลี้ยวขวาแปลว่าขวา แต่เราบอกว่าเลี้ยวขวาแปลว่าซ้าย ?! 5555

4 [Feature] สร้าง และ อ่านค่าจาก cookie พร้อมตั้งเวลา

เริ่มมาด้วยการติดตั้ง cookie-parser ก่อนเพราะด้วยความ minimal ม้ากมากของทั้ง Node และ Express (ที่กระทัดรัดตามชื่อ) จึงไม่ได้แนบพวกตัวอ่านหรือจัดการ cookie มาด้วยดังนั้นเราเลยต้องมาลงตัว cookie-parser เองไม่อย่างนั้นเวลาใช้ก็จะพบหน้าบึ้มๆไปนั่นเองง

npm install cookie-parser

โดยถ้าเราใช้คำสั่งตามตัวอย่างเราก็สามารถตั้งเวลาของ cookies รวมถึงชื่อตัวแปรต่างๆได้ด้วยนั่นเอง

ถ้าลองไปดูในเว็บ Browser ก็จะเห็นแบบนี้

ซึ่งอันนี้เป็นอะไรที่งงๆ หน่อยๆ เพราะใน Java Servlet มีมาให้อยู่ในตัวอยู่แล้วนั่นเองสามารถดึงค่ามาในตัวได้เลยทุกอย่างมันมีหมดใน java เลยทำให้คิดไปว่า ภาษาอื่น framework อื่นก็น่าจะมีแหละน่ามันพื้นฐานนะ

ตัวอย่างใน Java Servlet

สุดท้ายมาทำตั้งนานไม่รู้ว่ามันไม่มีให้เลย งง ตั้งนาน 5555 เสียเวลาไปเกือบครึ่งชั่วโมงเพราะว่าอ่าน docs ไม่ดีด้วยตอนนั้นนน

จะเห็นได้ว่าคือเราเซ็ท Cookie ได้นะแต่ว่าเอามาใช้ไม่เห็นจะได้ … และก็งมไปตั้งนาน

ที่มันไม่ด้เพราะว่าเราไม่ใช้ใช้ Middleware cookie-parser นั่นเองครับผม เพราะถึงแม้เราจะลง package ไปแล้วแต่ก็อย่าลืมนำ Package มาใช้นะ ! เหมือน import เฉยๆแต่ไม่สร้างตัวแปรไปใช้ 5555

ดังนั้นภาพ Step สมบูรณ์แล้วจะได้แบบนี้

หรือจะเปลี่ยนจากการเรียนแบบ Array มาเป็นแบบ .property ซ้อนเข้าไปก็ได้เช่นกัน

4 [Feature] อ่าน / รับค่า จากตัวแปรที่ส่งมาทาง params หรือ query string

แน่นอนเลยว่าในเรื่องของ logic การประมวลผลด้านหลังจะต้องมีการอ่านค่าที่ผู้ใช้ในฝั่ง FE ส่งข้อมูลไปให้ API ประมวลผลทำอะไรสักอย่างเช่นค้นหาชนิดสินค้าเข้ามาอะไรแบบนี้เป็นต้นซึ่งใน Java Servlet เราจะส่งมาผ่าน Query String ที่ผ่าน tag form เข้ามาเช่น ปุ่มติ้กเลือก radio ของหลายๆชิ้นชื่อซ้ำกันก็จะเข้ามาเป็น Array

JSP หน้า login ให้ลองดูที่ช่อง login เราจะต้องตั้งชื่อ name เอาไว้ว่า userName และ password ซึ่งสองตัวนี้นั้นครอบบน form ที่มี action เป็น post method ทำให้เวลา login แล้วจะไม่เห็น query string ยาวๆบนเว็บนั่นเอง
Java Servlet ทีนี้ก็จะเห็นว่าในฝั่งของ BE ก็จะต้องนำ query string ที่ชื่อเดียวกันมารับนั่นเองคือใช้ ตัวแปร request ร่วมกับ method getParameter(‘ชื่อquery string’) ซึ่งใน parameter ก็ไปเรียกชื่อเดียวกับตัวแปร name ที่ตั้งเอาไว้ในฝั่ง FE ทั้ง userName และ password เพียงเท่านี้ก็สามารถได้ตัวแปรสำหรับเอาไปเช็คใน Database แล้วว่ามี User หรือไม่นั่นเอง

ซึ่งจะเห็นว่าใน Backend ของ Servlet นั้นจริงๆแล้ว Concept ไม่ได้ต่างอะไรไปจาก NodeJS บน Express Framework มากมายเพราะสิ่งที่ทำก็คือยังคือ logic และทฤษฎีเหมือนที่อาจารย์สอน และก็เป็นแนวความคิดที่มานานแล้วคือ user request อะไรก็จะแนบตัวแปรนั้นมานั่นเอง แล้วจากนั้น Server เราก็ตอบกลับไปด้วย getServletContext แล้ว forward โยนกลับไปที่หน้า jsp นั่นเอง ซึ่งลองมาดูเวอร์ชั่น NodeJS ของเราบ้างกันดีกว่าาา

ทดสอบการส่งค่าข้อมูลผ่าน postman ด้วย method get ซึ่งจะเห็นว่าผมใช้เทคนิคการส่งแบบ Json ออกไปซึ่งส่วนตัวผมชอบวิธีนี้เพราะผมสามารถนำ json ไปแปลงเป็น Javascript Object พร้อมใช้งานต่อได้เลยนั่นเอง

โดยจากภาพคือตัวอย่างการส่งข้อมูลในรูปแบบของ param ซึ่งแน่นอนว่าเราจะ / ต่อไปกี่ตัวก็ได้เช่น /test/:name/:lname ก็หมายความว่าเราสามารถดึงตัวแปรได้สองตัวด้วยกันคือ req.param.name และ req.param.lname นั่นเอง ~

จากภาพก็จะเป็นตัวอย่างการส่งข้อมูลด้วย Query String นั่นเอง ซึ่งอยากจะใช้อะไรก็ขึ้นกับความเหมาะสมสุดแท้แล้วแต่ความสะดวกนะครับผมในมุมมองส่วนตัว

ซึ่งก็มีให้เลือกด้วยกันสองแบบระหว่าง query string กับ params ซึ่งส่วนตัวผมลองหาอ่านแล้วเหมือนกันว่าต่างกันอย่างไร ก็ยังไม่ได้ข้อสรุปที่ลงตัวเสียทีก็เลย ถือเสียว่าทำตามคนในทีมล่ะกันว่าสะดวกแบบไหนกันก็ใช้แบบนั้นไป

5 [Feature] อ่าน / รับค่าจาก post method ที่ undefined อย่างไร ?

สำหรับเรื่องความ minimal อีกอย่างใน express ที่ทำให้ผมสับสนตอนเริ่มมาทำใหม่ๆคือจะมีเรื่องของการส่งข้อมูลผ่าน body ของ http method post คือโดยปกติแล้วถ้าเกิดเราส่งอะไรไม่สำคัญออกไปเราจะส่งผ่าน query string หรือแบบ param ตามความเข้าใจนั่นก็ได้ครับ แต่ถ้าเกิดเราไม่ต้องการส่งข้อมูลไปหา api แล้วมี url ยาวๆข้างบน “เราจะทำการนำข้อมูลเหล่านั้นแนบลงไปไว้ใน body ของ http method post” ทำให้มันไม่มี url ออกมายาวๆหรือจะเพื่อความสวยงาม หรือรู้สึกอุ่นใจ (ที่ไม่ส่งข้อมูลความลับขึ้น url ขึ้นไป เหมือนพิมพ์ password ก็ไม่ควรโชว์บนหน้าจอใช่ม้า แต่จริงๆแล้ว ถ้าไม่ทำ SSL ก็ใช้ wireshark ดักได้เหมือนเดิมน้า)

จากภาพจะเห็นว่าถึงแม้เราจะเลือกการส่งแบบ Method Post แต่ถ้าเกิดเรายังส่งข้อมูลผ่าน Query String/Param ก็ยังสามารถทำได้ตามปกตินั่นเอง แต่ลองสังเกตในภาพดีๆ ตรงbody เป็น undefined เอ้ ~ แสดงว่าเหมือนกับมันไม่รู้จักค่าอะไรบางอย่าง ความน่าจะเป็นก็คืออาการเหมือน cookies เลยนะที่มองไม่เห็น body

คำตอบก็คือถูกต้องแล้วครับผมที่ body undefined เหมือนกับ cookies เลยก็เพราะมันยังไม่ได้ติดตั้งตัวอ่านเนื้อหา body นั่นเอง ! ซึ่งชื่อก็จะเหมือนกันเลยคือ body-parser พอเราลงปุปทีนี้ก็จะอ่านข้อมูลใน body ได้แล้ว เย้ๆ

npm install body-parser --save

โดยหน้าตัวตัว express middleware เราหลัง config มาถึง body parser ก็จะได้ออกมาเป็นแบบนี้นั่นเอง

ทีนี้เราก็ลองมาทดสอบตัว postman กันใหม่ดีกว่าว่าหน้าตาจะเป็นอย่างไรกัน

ทีนี้จะเห็นว่าผลลัพธ์ไม่ undefined อีกต่อไปแต่ได้ { } โล่งๆมาก็แสดงว่ามันอ่าน body ได้แล้วนะแต่ทำไมมันถึงยังโล้งโล่งอยู่อีกหว่า ? ลองสังเกตดูที่ภาพ postman ดีๆก่อนแล้วค่อยไปดูเฉลยข้างล่างน้าา

ที่ body นั้นมีแต่ { } ว่างเปล่าก็เพราะว่าเรายังคงส่งมาแต่ header แบบ query string/ param น่ะสิ !!! ลองดูที่ภาพ postman ตรง tab ข้างล่างจะเห็นว่าเราใช้งานที่ tab Headers(1) หน่ะซิ้ 55555 แถมลองดู url ที่ post method ด้วยจะเห็นว่ามันยังส่งไปแบบ params อยู่เลยนั่นเอง เท่ากับว่าเราก็ยังไม่ได้ใช้ประโยชน์จะ post method ที่สามารถแนบตัวแปรผ่าน body ไปได้นั่นเอง ดังนั้นวิธีส่งที่ถูกต้องคือเราก็ต้องไปใช้ tab body นั่นเอง ( axios ก็อย่าลืมส่งไปใน body นะ แต่อันนี้คือสาธิตการสร้าง route api)

เสร็จแล้ว ~

จากภาพน่าจะอธิบายได้หลายอย่างเลยครับ เพราะว่าตอนทำเองนี่ก็เป็นอะไรประหลาดๆที่ งงเหมือนกัน ทั้งสงสัยว่าจะรับตัวแปรอย่างไร 555 มีทั้ง Params และ Query String ได้โอกาส ก็เลยมาเขียน Medium ไว้เพื่อคนพึ่งเริ่มต้น แต่รู้สึกว่าต้องหาหลายๆเว็บ ผมก็ถือโอกาสทำ รวมเอาไว้ที่เดียวซะเลย ~

ก็จะเห็นว่า url ของเรานั้นไม่มีข้อมูลอะไรส่งออกไปแล้วครับซึ่งถ้าเป็นใน JSP ตัว Tag Form มันจัดการให้เองอยู่แล้วถ้าเกิดเราเลือกเป็น POST Method แต่พอมาการส่งแบบ ajax หรือ web technology สมัยใหม่ เราก็ต้องมาเรียนรู้ปรับกันบ้งาบางส่วน แต่ก็ไม่ได้หนีหายไปจากพื้นฐานที่เราเรียนในห้องหรอกครับผม

6 [Feature] สร้าง / อ่าน ข้อมูลจาก session อย่างไร ?

แน่นอนว่าเว็บโดยทั่วๆไปส่วนม้ากมากในสมัยนี้ก็คงมีระบบ session กันเกือบจะหมดแล้วเช่นเว็บฟังเพลง, ดูหนัง, social ต่างๆเป็นต้น ซึ่งการจะทำระบบ login แล้วให้ server จำว่าผู้ใช้คนนั้นกำลังใช้งานอยู่นะ ก็ต้องใช้ตัว session มาช่วยนี่หล่ะครับ และอย่างที่บอก Express มัน express สมชื่อจริงๆ … ก็เลยไม่มีตัว session มาให้ต้องมาลงกันเองด้วยมุขเดิมๆ 5555 โดยเราจะต้องติดตั้ง express-session

npm install express-session

จากนั้นก็ config พื้นฐานตามนี้ได้เลยยย

โดยถ้าเราลืมลง express-session แล้วนำไปใช้ใน middleware ของ express ตัว session ก็จะใช้งานไม่ได้นะ

เพียงเท่านี้เราก็พร้อมที่จะใช้งาน Session อย่างง่ายๆแล้วนั่นเอง

7 [Feature] สร้าง / อ่าน ข้อมูลจาก Redis Session อย่างไร ?

โดยหลังจากขั้นตอนการใช้งาน Session ในรูปแบบปกติไปแล้วซึ่ง Session นั้นจะเกาะติดกับ App เดียวของเราเท่านั้น แต่สำหรับในกรณีที่เราต้องการจะกระจายให้ Session สามารถย้ายไปใช้เครื่องที่ศูนย์กลางได้ วิธีการก็คือเราต้องหาเครื่องสำหรับใช้ในการเก็บ Session ขึ้นมาซึ่งก็คือ Redis นั้นเองโดยเข้าไปที่ connect-redis และติดตั้ง libs เพิ่มเติมเพียงเท่านี้เราก็พร้อมจะใช้งานแล้ววว

สำหรับวิธีการใช้งาน session เองนั้นก็ไม่ต่างจาก express-session ทั่วไปเลยคือเราสามารถเรียกใช้ attribute เดิมของ session ได้เลยเพื่อเข้าไป set key mySession และมี value เป็น String ที่เก็บคำพูดเอาไว้นั่นเอง

จากนั้นเราจะลองไปพิสูจน์กันว่ามีการเก็บข้อมูล session บน redis จริงมั้ยย ~

ภาพข้อมูลใน Redis ก่อนเรียกใช้ api ที่ path /testSession

คำสั่ง keys * คือแสดง key ทุกตัวที่อยู่ใน Redis ของเรานั่นเองซึ่งจากภาพเป็นภาพหลังจากยังไม่ได้เรียก api ที่ path /testSession ก็จะพบกับค่า key พื้นฐานในระบบ

ภาพข้อมูลใน Redis หลังจากที่เรียกใช้ api ที่ path /testSession

สังเกตดูว่าจะมี key ที่เพิ่มขึ้นมาขึ้นต้นด้วย sess:xxxxxx หลังจากนั้นเหมือนจะเป็น sessionId ของ client ที่ผ่านการเข้า hash ซึ่งถ้าเรานำค่า key ของ session ตัวนั้นไปเรียกใช้ก็จะได้เห็น value ที่เก็บเอาไว้

ลองนำ sessionId มาดูภายในก็จะพบ key/ valueต่างๆของ session ที่เราเป็นคนเซ็ทลงไป

ซึ่งถ้าเราลองสังเกตดูดีๆเราจะพบว่าค่า property ต่างๆใน session ที่เราตั้งค่ามาใน middleware express ของ session นั้นก็จะมีตัวแปรเก้บในนี้เช่นเดียวกันแต่ ตรงนี้ไม่แน่ใจเหมือนกันครับว่าเป็นเพราะอะไรทำให้พวก maxAge ตั้งผ่านตัว middleware แล้วใช้งานไม่ได้ (แต่ express-session ที่ไม่ใช่ redis นั้นทำงานได้ปกติ) ทำให้ผมลองไปลองมาแล้วได้วิธีการตั้ง maxAge บน Redis Session ก็คือตั้งผ่าน ตัวแปร req ไปเลยแล้วจะสามารถใช้งานได้

8 [Feature] ตั้งเวลา session timeout / max age บน Redis Session อย่างไร ?

สำหรับวิธีการตั้งค่าก็คือเราจะต้องไปจัดการเองผ่านตัวแปร req.session.cookie.[property ที่ต้องการ] ซึ่งสำหรับการตั้งเวลานั้นจะเรียกใช้ property maxAge นั่นเอง

ลองทดสอบเพิ่มการตั้งเวลาและเพิ่ม key ของ session เพิ่มเติม
หลังจากที่เพิ่ม key ไปอีกตัวเราก็จะเห็น key เพิ่มขึ้นมาและ maxAge ที่เราตั้งขึ้นมาเอง ซึ่งทีนี้เหมือนเวลาหมดตัว key ก็จะถูกลบไปเองอัตโนมัตินั่นเอง

เพียงเท่านี้เราก็สามารถใช้งาน redis session อย่างง่ายๆได้แล้วนั้นเอง ~

9 [Tips] ทำเป็น module ไว้เพื่อให้อ่าน code ได้ง่าย

จากตัวอย่างของโค้ดที่ผมลองทำให้ดูจะเห็นว่าเราสามารถเขียน Code ลงมายาวๆได้ก็จริงแต่ว่า Code คงจะอ่านยากน่าดูจริงไหมล่ะครับซึ่งเราก็แก้ปัญหานี้ด้วยการทำให้ Code ส่วนที่ยาวๆเป็น Module แทนไปแล้วก็ import เข้ามาก็สามารถใช้งานได้แล้ว อีกทั้งยังทำให้ไม่รกอีกด้วย

สำหรับการแปลงจาก Java มาเป็น NodeJS คู่กับ Express Framework ก็จะเห็นว่าใช้งานได้ไม่ยากนักไม่จำเป็นต้องเรียนรู้เรื่อง Class ที่สืบทอดต่างๆมาเพื่อนำมาใช้งานเหมือน Java ครับผม สำหรับใครที่กำลังอยากทดลอง NodeJS ผมก็หวังว่าคู่มือสรุปสั้นๆนี้จะช่วยแก้ปัญหาและลดเวลาการหาข้อมูลนะครับผม

รีวิวความชอบส่วนตัว/ ไม่ชอบ

  • + เริ่มต้นค่อนข้างง่ายมีคนใช้เยอะเวลาแก้ปัญหาค่อนข้างไวมากตาม Stack Overflow จะมีตอบเยอะรวมถึง Tutorial สอนพื้นฐานเยอะแยะมั่กๆทั้งภาษาไทยและอังกฤษ
  • + ขนาดเล็กไม่ต้องเข้าไปโหลด libs จาก internet มาลงจัดการผ่าน npm แทน ซึ่ง NodeJS มี libs เยอะมากๆ อยากจะทำอะไรแทบจะทุกอย่างมีคนทำมาให้หมดเลยยย เช่น login facebook, ส่ง email, etc. ทำให้ลดปัญหาเรื่อง Technical ไปได้เยอะและคิดแค่ Business Logic ที่เราต้องการจะทำจริงๆก็พอแล้ว
  • + — JS เขียนได้หลายท่ามากกก จนบางครั้งงงๆ กับตัวเอง 5555 เพราะว่ามันไม่เป็น pattern เปะๆ กับเป็น runtime คือต้องให้โค้ดรันไปก่อนแล้วค่อยดู error แต่ถ้าเป็นภาษาตอน compile time แบบ Java มันจะเช็ค syntax ให้เลย ซึ่งจริงๆจะบอกเป็นข้อเสียก็ไม่ใช่ แต่ถ้าเป็น Java, Dart, Kotlin ตระกูล compile time เวลาเขียนถ้า syntax error มันจะยอมไม่ให้รันตั้งแต่แรกแล้ว อันนี้บางทีพิมพ์ผิดแล้วก็หลงๆลืมๆกับตัวเองบ้างงง แต่จริงๆมันจะฝึกความแม่นให้เราทำให้เราต้องเขียนโค้ดอย่างรู้ที่มาที่ไปมากขึ้นเหมือนตอนที่เราเขียนบนกระดาษนั่นแหละ :P

--

--

Certified Kubernetes Administrator |ชอบวัฒนธรรมคุณค่าประเพณีจีน บางครั้งก็เขียนโปรแกรม ว่างๆก็อ่านนิยายกำลังภายในจีนโก้วเล้งจะชอบเป็นพิเศษ เล่นเกมก็ต้อง C-RPG