Node.js เริ่มต้นจาก 0
สารภาพแบบตรงๆ เกือบ 20 ปี ที่เรียนจบมาไม่เคยแม้แต่เขียน javascript เป็นเลย เพราะโดยสายที่ทำงานมา ไม่ได้ทำงานเกี่ยวกับ web dev สักเท่าไร อย่างมากถ้าจะทำ back end ก็จะใช้ php หรือก็ jsp จนกระทั้งมีความรู้สึกว่า ถ้าจะเริ่มต้นฝึกเขียน js จะเริ่มต้นยังไง ก็จักรวาล js มันชั่งกว้างใหญ่เหลือเกิน เอาล่ะ ก็เริ่มจากตัวที่มันดังที่สุดละกัน นั้นก็คือ Node.js ขนาดคนอยู่นอกจักรวาล js อย่างผมยังรู้เลยว่ามันมาแรงซะขนาดไหน
เพราะฉนั้น ต่อไปนี้คือจากประสบการณ์ คนที่มีสกิล js เป็นศูนย์ จะมาแชร์แบ่งบัน การเริ่มต้องเขียน js ด้วย Node.js ว่ามันช่างง่ายดายเสียจริง ม่ะ มาเริ่มกันเลย
ขั้นแรกก็ไม่มีอะไรมาก ตอนแรกที่ผมเริ่ม ผมยังเข้าใจว่า node.js มันคือ IDE สำหรับเขียน js ด้วยซ้ำ 555+ แต่มันไม่ใช่นะมัน Platform จ้าาาาาา
Download | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
หลังจากลงเสร็จแล้วก็มาเช็ค version กันหน่อยยยย
$node -v
$npm -v
หลังจากนั้นก็เริ่มสร้าง folder project แล้วก็สร้างไฟล์ js มาผมให้ชื่อว่า app.js
หลังจากสร้างไฟล์ app.js เสร็จผมใช้คำสั่ง
$npm init -y
จะได้ package.json มา หลังจากนั้นให้ ลง express
ซึ่ง Express เป็น web application framework บน Node.js ที่จะทำให้ชีวิตเราสะดวกสบายในการเขียนโคดมากๆ
$npm install express --save
express พร้อม version ของมันก็จะถูกเพิ่มเข้าไปใน dependencies ใน package.json
เริ่มเขียนโคด เรียกใช้งาน express
const express = require('express');const app = express();
ฟังก์ชั่น get ก็จะหน้าตาสั้นๆ แบบนี้
app.get('/api', function(req, res) { var text = req.param('text'); var mode = req.param('mode'); console.log("get:text is = "+text+", mode is "+mode);
res.end("get:text is = "+text+", mode is "+mode);});
จากตัวอย่างข้างบน ผมรับพารามิเตอร์มา 2 ตัวคือ text และ mode และ ใช้ res.end ส่งค่ากลับ
สำหรับ post method ถ้าผมจะรับค่าจาก json หรือ x-www-form-urlencoded ผมจะต้องเรียกใช้แบบนี้ก่อน
app.use(express.json());app.use(express.urlencoded({ extended: true }));
หลังจากนั้น ฟังก์ชั่น post ก็จะเป็นแบบนี้
app.post('/api',function(req,res){ var text = req.body.text; var mode = req.body.mode; console.log("post:text is = "+text+", mode is "+mode);
res.end("post:text is = "+text+", mode is "+mode);});
สุดท้ายผมจะเปิด port ไว้ที่ 8080
const port = process.env.PORT || 8080app.listen(port, () => console.log(`Listening on port:${port}...`) );
หรือ ผมจะ set port ผ่านไฟล์ config เริ่มต้นด้วยคำสั่ง
npm install config --save
ผมจะสร้าง folder config และไฟล์ default.json ข้างในไฟล์ json ผมจะกำหนด port ที่นี้
{
"app": {
"port": "8080"
}
}
ในไฟล์ app.js ผมสามารถเรียนใช้ config ได้ด้วย
const config = require("config");
เสร็จแล้ว แก้โคดนิดหน่อย หลังจากนั้นถ้าผมจะเปลี่ยน port ผมสามารถเข้าไปแก้ที่ไฟล์ config ได้เลย เหมาะสำหรับ โคดยาวๆ เราไม่ต้องเสียเวลามานั้งไล่โคดเพื่อเปลี่ยน port
const port = process.env.PORT || config.app.port;app.listen(port, () => console.log(`Listening on port:${port}...`));
วิธีการรัน server ใช้คำสั่ง
node app.js
อีกข้อดีคือเราสามารถเลือกได้ว่าเราจะใช้ config ตัวไหน ผมจะได้ไฟล์ config อีกตัวให้ชื่อว่า production.json หน้าตาของมันข้างในเหมือนกับ default.json แต่ผมจะเปลี่ยนเลข port เป็น 8081 ตอนผมรันบน server ผมแค่ใช้คำสั่ง
NODE_ENV=production node app.js
ในกรณีที่เรากำลัง dev อยู่แล้วไม่อยาก restart บ่อยๆ ทุกครั้งที่เราแก้โคด ให้เราลง nodemon
npm install nodemon
start ด้วยคำสั่ง
npx nodemon
nodemon จะเข้าไปดู js main fileใน package.json แล้วก็จะ start server ตามชื่อ main นั้น
ทดสอบลองส่งค่าผ่าน get method ด้วย browser
http://localhost:8080/api?text=12345&mode=ta
ทดสอบส่งค่าผ่าน post method ด้วย postman
คราวนี้ผมจะลองแยก get และ post ไว้อีกไฟล์หนึ่งโดยใช้ Router
เริ่มแรกผมจะสร้างไฟล์ apiService.js แล้ว copy ส่วนที่เป็น get และ post มาไว้ในไฟล์นี้
const router = require('express').Router();router.get('/', function(req, res) {
var text = req.param('text');
var mode = req.param('mode');
console.log("get:text is = "+text+", mode is "+mode);
res.end("get:text is = "+text+", mode is "+mode);
});router.post('/',function(req,res){
var text = req.body.text;
var mode = req.body.mode;
console.log("post:text is = "+text+", mode is "+mode);
res.end("post:text is = "+text+", mode is "+mode);
});module.exports = router;
ส่วนในไฟล์ app.js แทนที่ด้วย
const service = require('./apiService');
server.use('/api',service);
ลองทดสอบอีกทีจะเห็นว่าใช้ได้ได้เหมือนเดิม วิธีนี้เหมาะสำหรับ ระบบขนาดใหญ่ สามารถใช้หลายๆไฟล์ทำให้อ่านโคดง่ายขึ้น