TPA & Alibaba Cloud ผนึกกำลัง สร้างสรรค์สัมมนาและอบรม ต่อยอดความร่วมมือสู่อนาคต
เมื่อวันที่ 21 พฤศจิกายน ที่ผ่านมา คุณเซฟ พงษ์ศิริ นายก […]
จากตัวอย่างการเขียน Route URIs ของการเขียน RestApi ในตอนที่แล้วนั้น มีเพียง 4 route เท่านั้น คือ /get,/add,/edit และ /delete แต่ในชีวิตจริงแอพหนึ่งแอพมีเป็น 100 route ขึ้นไปแน่นอนตามขนาดแอพ แอพใหญ่ๆอาจจะมีมากถึงหมื่นเลยทีเดียว ส่วนผมเองเคยแตะถึงระดับพันต้นๆเท่านั้น เมื่อมี route มากขึ้น หากมาเขียนไว้ในไฟล์ๆเดียว หากในบริษัทมีคนพัฒนา Api หลายคนคงต้องปวดหัวในการแก้ไขไฟล์หลักนี้แน่นอน ถึงแม้ปัจจุบันมีเครื่องมือในการคอนโทรลเวอร์ชั่นดีๆอย่าง svn และ github ในตอนนี้เราจะมาแก้ไขปัญหานี้แบบง่ายๆ
[img class=”aligncenter” src=”/wp-content/uploads/2016/02/confuse.gif”]
ขั้นตอน
var express = require("express"); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.data =[]; //แทรกโค้ดสำหรับตอนที่ 6 ตั้งแต่ตรงนี้ app.listen(3000); console.log("My Service is listening to port 3000.");
2. สร้างโฟลเดอร์ใหม่ชื่อ snippets สำหรับเก็บ Route ต่างๆ
3. สร้างไฟล์ใหม่ในโฟลเดอร์ snippets ชื่อ sampleRoutes.js
4. ป้อนโค้ดใน sampleRoutes.js ดังนี้
module.exports = function (app){ app.get('/get', function (req, res) { console.log('get data'); res.send(app.data); }); app.post('/add', function (req, res) { console.log('add data'); req.body.id = app.data.length +1; app.data.push(req.body); res.send(app.data); }); app.put('/edit', function (req, res) { if(req.body.id) app.data[req.body.id-1] = req.body; console.log("edit data!"); res.send(app.data); }); app.delete('/delete', function (req, res) { if(req.body.id) app.data.splice(req.body.id-1,1); console.log("delete data!"); res.send(app.data); }); }
5. ที่ไฟล์ ch6_snippets.js แทรกโค้ดต่อจากคอมเมนท์ส่วนที่ระบุไว้ ดังนี้
var fs = require ('fs'); fs.readdirSync('snippets').forEach(function(file) { if ( file[0] == '.' ) return; var routeName = file.substr(0, file.indexOf('.')); require('./snippets/' + routeName)(app); });
6. รันใน Terminal node ch6_snippets.js
node ch6_snippets.js
7. ทดสอบฟังก์ชั่นใน Postman แบบเดียวกับ ตอนที่แล้ว
อธิบายโค้ด
ที่ไฟล์ ch6_snippets.js
var fs = require ('fs');
เรียกใช้ไลบรารี่ fs ย่อมาจาก file system ซึ่ง nodejs ได้พัฒนามาให้สำหรับจัดการเกี่ยวกับการอ่านเขียนไฟล์และไดเรคทอรี่
fs.readdirSync('snippets').forEach(function(file) { if ( file[0] == '.' ) return; var routeName = file.substr(0, file.indexOf('.')); require('./snippets/' + routeName)(app); });
ข้อดี
ข้อเสีย
ผู้เขียนใช้วิธีนี้สำหรับโครงการขนาดเล็กและกลาง เคยใช้สูงสุดหลักพัน route ด้วยเครื่องเสปค core i3 ก็ใช้เวลาคอมไพล์โปรเจคไม่กี่วินาที เหมาะสำหรับมือใหม่ที่ต้องการความสะดวก แต่ปัจจุบันไม่ได้ใช้วิธีนี้แล้ว ใช้วิธีการทำ dynamic single route คือมี route เดียวทั้งโปรเจคมีการเรียกใช้ฟังก์ชั่นไหนก็ค่อยสร้างขึ้นมา และทำการทำลายออบเจคนั้นเมื่อเลิกใช้
พบกับตอนที่ 7 การเขียนโค้ดแบบ Callback