โหนดเจเอสคืออะไร (What is Node.js)
Node.js | React | Reactnative | JSLibrary | PDF.js | AdminLTE | Laravel | JavaScript
Node.js
Node หรือ Node.js คือ โปรแกรมสำหรับสั่งให้โปรแกรมภาษา Javascript ที่เขียนขึ้นทำงาน เช่น C:\> node hello.js ส่วน NPM (Node Package Manager for Node.js packages) คือ โปรแกรมจัดการ Node ซึ่งมี Package ให้จัดการเรียกใช้ได้จำนวนมาก เช่น C:\> npm i react และ npm i react-dom และ npm list สำหรับจัดการ React Library เพื่อเรียกใช้งาน ส่วน NPX นั้นมาพร้อมกับ npm 5.2 ขึ้นไป ใช้ npx -h พบว่าโปรแกรมนี้ คือ Execute binaries from npm packages. เช่น npx create-react-app hello (ระหว่างติดตั้งจะมีการติดตั้ง react, react-dom, and react-scripts เพิ่มด้วย) แล้ว cd hello แล้ว npm start และเปิด http://localhost:3000 ซึ่งทั้ง NPM และ NPX มาพร้อมการติดตั้ง Node.JS
Yarn คือ Dependency management tool หรือ package manager สำหรับ JavaScript จากทีมพัฒนาของ facebook ทำงานได้เร็ว และง่ายกว่า สามารถแชร์ package / module ได้ คล้ายกับ NPM แต่ปกติ node_modules จะแยกในแต่ละ folder แต่ Yarn workspaces จะแชร์ node_modules
C:\> node -v (v10.15.3)
C:\> npm -v (6.4.1)
C:\> npx -v (6.4.1)
C:\> yarn -v (1.22.4)
เฟรมเวิร์ค และแพลตฟอร์ม ฟรมเวิร์ค (Framework) คือ ชุดคำสั่ง เครื่องมือ โครงสร้าง ต้นแบบพื้นฐาน ที่ถูกสร้างมารองรับการทำงาน เพื่ออำนวยความสะดวกแก่ผู้ใช้งาน แทนที่จะสร้างเองก็มีเครื่องมือที่พร้อมใช้ ช่วยให้พัฒนาระบบได้เร็ว และง่ายขึ้น แต่ขนาดโปรแกรมจะมีขนาดใหญ่ ต้องศึกษาฟังก์ชัน และใช้คุณสมบัติได้เท่าที่มี อาทิ Laravel เป็น Web application framework ส่วน Angular และ React Native เป็น Framework แบบ Cross Platform Technology
พลตฟอร์ม (Platform) คือ การทํางานร่วมกันของฮาร์ดแวร์ หรือซอฟต์แวร์ อาจเป็นระบบปฏิบัติการ สถาปัตยกรรมคอมพิวเตอร์ เช่น ไมโครซอฟท์วินโดวส์ แมคโอเอสเอ็กซ์ หรือแอนดรอย ครอสแพลตฟอร์ม (Cross Platform) คือ การรองรับให้โปรแกรมคอมพิวเตอร์ ภาษาโปรแกรม ระบบปฏิบัติการ หรือ ซอฟต์แวร์ สามารถทำงานได้บนหลายแพลตฟอร์ม เช่น บนไมโครซอฟท์วินโดวส์ บนแมคโอเอสเอ็กซ์ บนลีนุกซ์ บนแอนดรอย และบนเพาเวอร์พีซี
Top 20 Front-end ได้แก่ 1) React Native 2) Framework7 3) Flutter 4) NativeScript 5) Meteor 6) JQuery 7) CocoaTouch 8) Xamarin 9) Swiftic 10) Ionic 11) Sencha Ext JS 12) Apache Cordova 13) Onsen UI 14) Corona SDK 15) Monaca 16) Mobile Angular UI 17) Appcelerator Titanium 18) Uno 19) Ktor 20) Aurelia Top 10 Web Frameworks ได้แก่ 1) Ruby on Rails (Ruby) 2) Laravel (PHP) 3) Django (Python) 4) ASP.NET (C#) 5) Express (JavaScript) 6) Spring (Java) 7) Angular (JavaScript) 8) Ember (JavaScript) 9) Meteor (JavaScript) 10) Vue (JavaScript)
Node.js
ชุดโปรแกรมสำหรับสั่งให้โปรแกรมจาวาสคริปต์ที่เขียนขึ้นทำงานได้ ส่วน NPM คือ ตัวจัดการ Node Package
React Native
JS Framework สำหรับพัฒนา Mobile App แบบ Cross-platform ที่เขียนครั้งเดียว ใช้ได้ทั้งบน Android และ iOS
PDF.JS
ชุดโปรแกรมเพื่อแสดงแฟ้มข้อมูลแบบ PDF บนเว็บบราวเซอร์สำหรับทุกอุปกรณ์ จึงไม่จำเป็นต้องมีแอพอื่น
Laravel
เฟรมเวิร์คภาษาพีเอชพี ในแบบ MVC ช่วยพัฒนาระบบได้อย่างรวดเร็ว แทนการพัฒนาตามหลักโปรแกรมโครงสร้าง
การติดตั้งหรืออัพเดทรุ่นของ node.js

API: ธ.แห่งประเทศไทย
ารติดตั้ง node.js เพื่อใช้คำสั่ง npm (Node Package Manager) เริ่มจากดาวน์โหลด node-v...-x64.msi สำหรับ windows จาก https://nodejs.org/en/ พบโปรแกรมใน C:\Program Files\nodejs\ หลังติดตั้งตรวจสอบรุ่นด้วย C:\> npm -v (16.7.0)
มื่อเวลาผ่านไป พบว่า node.js ได้รับการพัฒนาจนมีรุ่นใหม่ และรุ่นเก่าใช้ติดตั้ง package ใหม่ไม่ได้ จึงต้องติดตั้งโปรแกรม nvm โดยดาวน์โหลด nvm-setup.exe สำหรับ windows มาใช้งาน เพื่อใช้จัดการรุ่นของ node.js ทำให้เราสามารถติดตั้ง node.js ได้หลายรุ่น และเลือกใช้รุ่นที่ต้องการได้ เช่น C:\> nvm use 16.7.0 เป็นต้น ดังนั้นหลังติดตั้ง node.js แล้วจะได้ node , npm และ npx ไว้ใช้งาน แต่ยังไม่มี nvm จึงต้องติดตั้งเพิ่ม เพราะเมื่อเวลาผ่านไป ก็จะต้องติดตั้ง node.js รุ่นใหม่ แม้ node.js รุ่นเก่าจะเป็น LTS (Long Term Support) version แต่มี package เสริมจำนวนมากที่ถูกพัฒนาเพิ่ม และแจ้งว่าไม่เข้ากันกับ package รุ่นเก่า ที่เป็น deprecated ไปแล้ว และไม่สนับสนุน package เหล่านั้นอีกต่อไป และ nvm นี้เองที่ช่วยสลับรุ่นของ node.js ทำให้สามารถนำ project เก่ามาแก้ไข โดยไม่ต้องปรับแก้ code ตามการพัฒนาของ node.js ในแต่ละรุ่น
ตรวจรุ่น https://nodejs.org/download/release/latest/
ตรวจรุ่น https://github.com/coreybutler/nvm-windows/releases
nvm-setup.zip (สั่ง nvm-setup.exe ได้ C:\Users\ACER\AppData\Roaming\nvm)
nvm -v (1.1.7)
npm cache verify (ตรวจสอบ cache)
npm cache clean -f (ถ้าติดตั้ง/สั่งงานไม่สำเร็จ ข้อมูลอาจค้าง ถ้าเจอปัญหาลองไปล้าง cache)
nvm list available (แสดง version ทั้งหมดที่ติดตั้งได้)
nvm install 16.7.0 (ติดตั้ง node.js รุ่นที่กำหนด)
node -v (เก่า v10.15.3)
npm -version (เก่า 6.4.1) 
nvm list (แสดง version ที่ถูกติดตั้งไว้แล้ว)
nvm use 16.7.0
node -v (v16.7.0)
npm -version (7.20.3)
สำรวจหลังติดตั้ง node ราสามารถใช้งาน Node แบบ Terminal window รองรับการทำงานแบบ Read-Evaluate-Print-Loop = REPL หมายถึง อ่านค่า ประเมิน พิมพ์ และทำซ้ำได้ สำหรับทดสอบการทำงาน ซึ่งรองรับการใช้คำสั่ง javascript คล้ายที่พบบน Chrome ใน Developer tools, Console window เมื่อทดสอบใช้คำสั่งทั้งสองสภาพแวดล้อมแล้ว พบว่า ให้ผลลัพธ์คล้ายกัน เรามาทดสอบใช้คำสั่ง javascript ดังนี้
C:\> node -v
ตรวจสอบรุ่น มีผลลัพธ์ เช่น v16.3.0
C:\> echo console.log('hello'); > x1.js
เขียนโปรแกรมภาษา javascript อย่างง่าย บน DOS mode
C:\> node x1.js
ผลการประมวลผล x.js ผ่าน node พบคำว่า hello
C:\> node
ใช้ Command line mode
พบ Welcome to Node.js v16.3.0. เรียกส่วนช่วยเหลือด้วยการพิมพ์ .help
สั่ง console.log("hello") หรือ .exit เพื่อออกจาก Command line mode ได้
> 1+2+(3-4)*5+6
ประมวลผล และแสดงผลลัพธ์ทันทีระหว่างพิมพ์
เช่น ระหว่างพิมพ์ 1+2 ก็แสดงผล 3 ขึ้นมาโดยยังไม่ต้อง enter ก็ได้
ผลลัพธ์นี้หลังกด enter คือ 4
> var a=5;
undefined
> a
5
สร้างตัวแปร พร้อมกำหนดค่า
พิมพ์ชื่อตัวแปรบน prompt จะแสดงค่าของตัวแปรทันที
> function hello(x) {
... console.log(x)
... }
undefined
> hello(5)
5
undefined
> .exit
เขียนฟังก์ชัน hello รับค่า และคืนค่า แล้วเรียกใช้
ตามด้วยการออกจาก node ด้วย .exit
> function j(){for(let i=0;i<5;i++){console.log(i);};return 5;}j();
พิมพ์ function แล้วเรียกใช้ จะไม่พบ undefined
จะพิมพ์คำสั่งโดยตรง หรือพิมพ์หลัง .editor
ก็ให้ผลเหมือนกันคือ พิมพ์ 0 - 5 บรรทัดละตัว
C:\> echo function x(){console.log(5);}>x2.js
C:\> node
> .load ./x2.js
> .load x2.js
> x()
5
> .save x3.js
> .exit
C:\> type x3.js
C:\> node
> .load x3.js
> x()
มีคำสั่งรองรับการใช้งานบน Node REPL เช่น โหลดแฟ้ม .js แล้วทดสอบเรียกใช้ function ได้
สามารถใช้คำสั่งต่าง ๆ เช่น .load .exit .help .break .clear .save
.editor จะเป็นพื้นที่พิมพ์ code หากยกเลิกให้กด Ctrl+C to cancel ถ้าเสร็จสิ้นให้กด Ctrl+D to finish
> .editor
function x(){return 5;}
Ctrl+D
> x()
5
> .save x4.js
> .exit
C:\> type x4.js
ผลการใช้ .save คือเก็บสิ่งที่เราพิมพ์เข้าไป พบว่า ในแฟ้ม x4.js จะมีฟังก์ชัน x() และการเรียนใช้ฟังก์ชัน x() เพียง 2 บรรทัด
Node.js : เปิดบริการผ่านพอร์ต 8888 ริ่มต้นจากการเขียน code นี้ ใน hellonode.js แล้วสั่ง C:\> node hellonode.js หรือเขียนบน Node.js REPL Terminal (Node shell) จากนั้นจะพบ Server running at http://localhost:8888/ ที่ DOS Prompt สามารถยกเลิกบริการด้วยการกด Ctrl-C ตรวจสอบบริการโดยใช้เว็บบราวเซอร์เปิด http://localhost:8888 จะพบคำว่า Hello World from NodeJS ซึ่งเป็นการใช้ Built-in HTTP Module ที่มากับ Node.js มาทำงาน สำหรับคำสั่งในบรรทัดสุดท้าย มีการเรียกใช้ตัวแปร svr และในกรณีที่ไม่สร้างตัวแปรนี้ ด้วย var svr ก็ยังสามารถสั่ง createserver ได้ แต่จะไม่สามารถเรียกใช้ svr.close() เพื่อปิดบริการเว็บเซอร์ฟเวอร์ หากต้องการปิด ต้องไปสั่ง Kill process ผ่านบริการของระบบปฏิบัติการ
ตัวอย่างนี้เรียกใช้ Module ของ Node.js ชื่อ http

const http = require('http');
var svr = http.createServer( (request, response) => {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World from NodeJS');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
// svr.close(); ถ้าสั่งใน Node REPL แล้วออกจาก node จะ stop Server อัตโนมัติ 
hellonode.js
Node.js : การเรียกใช้ http และ url module
# การเรียกใช้ Node.js URL Module
- อ่านจาก https://www.w3schools.com/nodejs/nodejs_url.asp
- สร้าง demo.js ที่มีคำสั่งเปิดบริการรองรับ URL Module
- สร้าง summer.html และ winter.html
- DOS> node demo.js
- DOS> explorer http://localhost:8080/ (404 Not Found)
- DOS> explorer http://localhost:8080/summer.html (ok)
```
<!DOCTYPE html><html><body>

Summer

I love the sun!

</body></html> <!DOCTYPE html><html><body>

Winter

I love the snow!

</body></html> ``` # code ใน demo.js ``` var http = require('http'); var url = require('url'); var fs = require('fs'); http.createServer(function (req, res) { var q = url.parse(req.url, true); var filename = "." + q.pathname; fs.readFile(filename, function(err, data) { if (err) { res.writeHead(404, {'Content-Type': 'text/html'}); return res.end("404 Not Found"); } res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); return res.end(); }); }).listen(8080); ```
การอ่านข้อมูล API อัตราแลกเปลี่ยนจาก ธนาคาร (ต.ย.75) นาคารแห่งประเทศไทย (ธปท.) ได้เพิ่มบริการการเผยแพร่ข้อมูลสถิติรูปแบบ API เพื่อเป็นการส่งเสริมความร่วมมือในการเผยแพร่ และแลกเปลี่ยนข้อมูลต่าง ๆ ระหว่างองค์กร และสนับสนุนการดำเนินธุรกิจในยุคดิจิตอล มีวัตถุประสงค์เพื่อให้ผู้ใช้ข้อมูลกลุ่มองค์กรต่าง ๆ เช่น กลุ่มสถาบันการเงิน สำนักข่าว ผู้ให้บริการข้อมูล นักพัฒนาระบบงาน และบริษัทต่าง ๆ นำข้อมูลไปใช้ประโยชน์ได้อย่างสะดวก คล่องตัว รวดเร็ว และปลอดภัย พบบริการในกลุ่ม Economics Indicator ที่ประกอบด้วย อัตราแลกเปลี่ยน อัตราดอกเบี้ย และผลการประมูลตราสารหนี้ จำนวน 21 ตัว โดยผ่านช่องทาง Bank of Thailand Website ในหน้า "บริการข้อมูล BOT API"
ซึ่ง API หรือ Application Programming Interface คือ บริการช่องทางการเชื่อมต่อ เพื่อแลกเปลี่ยนข้อมูลจากระบบหนึ่งไปสู่ระบบอื่น ๆ ที่สะดวก รวดเร็ว ปลอดภัย หน้าที่หลักของ API คือ คอยรับคำสั่งจากฝั่ง Client ที่เป็น Application เช่น Web App., Mobile App. หรือ Desktop App. เมื่อฝั่ง Client ส่งคำสั่ง จะเรียกว่าการ Request จากนั้น ตัว API ที่อยู่บน Server จะรับคำสั่งดังกล่าว นำไปประมวลผล และสรุปเป็นข้อมูลที่ตรงกับ Request และส่งข้อมูลเหล่านั้นกลับไปที่ฝั่ง Client หรือ Application เพื่อนำไปใช้งานต่อไป
ตัวอย่าง API ที่ใช้งานนี้ ได้แก่ Spot Rate (ดอลลาร์/บาท) คือ อัตราแลกเปลี่ยนล่วงหน้าคำนวณได้จากอัตราแลกเปลี่ยนทันที และ SWAP POINT
มีขั้นตอน ดังนี้
1. Signup / Register / Create new account สมัครใช้บริการของ bot.or.th เลือกประเภทองค์กรเป็น "ประชาชน / Individual"
2. เข้าไปคลิ๊ก activate ผ่าน email แล้ว Login เข้าระบบ โดยใช้อีเมลเป็น username
3. คลิ๊ก Apps, Create new App, Title=thaiall แล้ว submit เพื่อลงทะเบียนสร้างชื่อแอพ Create Application | BOT API
4. จะได้ Client secret และ Client ID กด Show แล้วคัดลอกเก็บไว้ เช่น "6ab .. 77c" เพื่อนำไปกรอกใน [x-ibm-client-id] ใน PHP
5. เลือก API Products หรือ available API ในหน้า Apps แล้วเลือก เช่น "Interest-rates (2.0.0) (default)"
6. เลือก Subscribe - Interest-rates (2.0.0) และ Bookmark เช่น "Spot Rate USD/THB 2.0.0"
7. เลือกภาษา เช่น cURL , PHP* , Node* , Python , Java , C# ซึ่งมีตัวอย่าง source code ที่ประมวลผล แล้วจะได้ข้อมูลแบบ JSON
8. การเรียกใช้งานบาง API ได้จำกัดให้ใช้ไม่เกิน 200 ครั้งต่อชั่วโมง ใช้อีเมลต่างกัน ก็จะได้ Client ID ไว้ใช้ต่างกัน ซึ่งทำงานได้ทั้งบน localhost หรือ server
https://www.bot.or.th/Thai/Statistics/EconomicAndFinancial/Pages/API.aspx
Interest Rates 2.0.0 - /node/469
Spot Rate USD/THB 2.0.0 - /node/466
thaiall.com/node.js
/* bot.js
C:\> cd mynode
C:\mynode> npm install --save request
C:\mynode> dir node_modules
C:\mynode> node bot.js
*/
var request = require("request");
var options = { method: 'GET',
  url: 'https://apigw1.bot.or.th/bot/public/Stat-SpotRate/v2/SPOTRATE/',
  qs: { start_period: '2021-06-01',end_period: '2021-06-12' },
  headers: { accept: 'application/json', 'x-ibm-client-id': 'xxx ... xxx' } };
request(options, function (error, response, body) {
  if (error) return console.error('Failed: %s', error.message);
  console.log('Success: ', body);
});
/*
C:\mynode> node bot.js
Success:  {"result":{"timestamp":"2021-08-12 17:32:39","api":"Spot Rate USD/THB"
,"data":{"data_header":{"report_name_eng":"Spot Rate and Swap Point","report_nam
e_th":"Spot Rate and Swap Point","report_uoq_name_eng":"","report_uoq_name_th":"
","report_source_of_data":[{"source_of_data_eng":"Thomson Reuters (Refinitiv)","
source_of_data_th":"Thomson Reuters (Refinitiv)"},{"source_of_data_eng":"Bank of
 Thailand","source_of_data_th":"ธนาคารแห่งประเทศไทย"}],"report_remark":[{"report
_remark_eng":"Forward exchange rate can be derived from the addition of spot rat
e and swap point.","report_remark_th":"อัตราแลกเปลี่ยนล่วงหน้าคำนวณได้จากอัตราแล
กเปลี่ยนทันที และ SWAP POINT"},{"report_remark_eng":"This table has been discont
inued  due to redundancy with other tables on the BOT website or original source
s.","report_remark_th":"ตารางนี้ถูกยกเลิกการเผยแพร่ เนื่องจากข้อมูลมีการเผยแพร่ใ
นตารางอื่นของ ธปท. หรือหน่วยงานอื่นที่เป็นเจ้าของข้อมูลอยู่แล้ว"},{"report_remar
k_eng":"1 Satang = 0.01 Baht.","report_remark_th":"1 สตางค์ = 0.01 บาท   "}],"la
st_updated":"2021-08-03"},"data_detail":[{"period":"2021-06-11","bid_rate":"31.0
700000","offer_rate":"31.0800000"},{"period":"2021-06-10","bid_rate":"31.1700000
","offer_rate":"31.1800000"},{"period":"2021-06-09","bid_rate":"31.1600000","off
er_rate":"31.1650000"},{"period":"2021-06-08","bid_rate":"31.2000000","offer_rat
e":"31.2100000"},{"period":"2021-06-07","bid_rate":"31.1900000","offer_rate":"31
.2000000"},{"period":"2021-06-04","bid_rate":"31.2700000","offer_rate":"31.28000
00"},{"period":"2021-06-02","bid_rate":"31.1500000","offer_rate":"31.1600000"},{
"period":"2021-06-01","bid_rate":"31.1400000","offer_rate":"31.1500000"}]}}}
เปิดด้วย http://jsonviewer.stack.hu/ แสดงผ่าน Tree viewer สวย ๆ
*/
สั่ง bot.js ครั้งแรกพลาด ครั้งที่สอง ok สั่งให้ bot.js ทำงาน ซึ่งไม่ใช่ pure javascript แต่เป็น javascript บน Node.js ซึ่งใน code ได้เรียกใช้ request module และมีบรรทัดคำสั่งเพียง 3 บรรทัด แต่ต้องกำหนด start_period , end_period และ x-ibm-client-id ให้ถูกต้อง ครั้งแรกที่สั่งได้รับข้อความว่า Success: {"httpCode":"400","httpMessage":"Bad Request","moreInformation":[{"mes sage":"Parameter: start_period 2564 not in A.D. year"},{"message":"Parameter: en d_period 2564 not in A.D. year"}]}
รุปเป็นภาษาคอมพิวเตอร์ ได้ว่า คำขอไม่ถูกต้อง "Bad Request" ซึ่งได้รับมาจาก httpMessage เมื่ออ่านข้อความต่อก็รู้ว่า A.D. year ซึ่งมาจาก Anno Domini ที่เป็นภาษาละติน แปลว่า in the year of the Lord ในปีของพระคริสต์ หลังจากแก้ไขแล้วก้ได้รับ json มาจากธนาคารแห่งประเทศไทยตามที่ร้องขอไป
rspsocial
Thaiall.com