Node.js සිංහලෙන් ඉගෙන ගමු - පාඩම් මාලාව 4



    මේ පාඩමෙන් අපි බලමු කොහොමද server එකට එන POST request handle කරන්නෙ කියල. සාමාන්‍යයෙන් අපි Website එකක Form එකක් පුරවන විට ඒ පුරවන දත්ත Server එකට යවන්න භාවිතා කරන Method එක තමයි POST Method එක. මෙහිදී ඇති වාසිය තමයි අපි පුරවන ලද දත්ත අපේ පරිගණකයේ සිට Server එකට යන අතර මගදී වෙනත් කිසි කෙනෙකුට බලා ගනීමට නොහැකි වීම. එම නිසා ඉතා සංවේදී දත්ත (උදා: Password) අතර මැදි දත්ත පැහැර ගන්නන් අතට පත්වීමට ඇති ඉඩ කඩ අඩු වෙන්ව. GET Method එක භාවිතා කරන විට දත්ත සියල්ලම ගමන් කරන්නෙ URL එකට එකතු වීමෙන්. එවිට ඕනෑම කෙනෙක්ට පහසුවෙන් දත්ත ලබාගැනීමට හැකියාව පවතිනව. නමුත් POST Method දත්ත සියල්ල Request Body එකට ඇතුලත් වී තිබෙන නිසා එම දත්ත කියවීමට හැකියාව තිබෙන්නේ Server එකට පමනයි. අපි බලමු කොහොමද Node.js භාවිතා කරගෙන POST request handle කරන්නෙ කියල.
    මෙම පාඩම ආරම්භ කිරීමට පෙර ඔබගේ Web browser එකට REST Client එකක් (Postman, RESTED) Install කර ගත යුතුය. අපිට Web browser එක හරහා එකවර POST request එකක් Server එකට යැවීමට හැකියාවක් නොමති අතර. ඒ සඳහා REST Client ක් හෝ Webpage එකක Form එකක් නිර්මානය කරගත යුතුය. Webpage එකක් නිර්මානය කර මෙම ක්‍රියාවලිය සිදුකිරීම පසු පාඩමකදී විස්තර කිරීමට බලාපොරොත්තුවෙන් සිටින බැවින් මෙම පාඩමේදී REST Client ක් භාවිතා කරයි.
    POST Request handle කරන්න නොයෙකුත් ක්‍රම තිබුනත් අපි මේ පාඩමෙන් POST Request වර්ග දෙකක් handle කරන ආකාරය ඉගෙන ගමු. එවා නම්:
  • URL Encoded POST Request
  • JSON POST Request
URL Encoded POST Request:

    මුලින්ම URL Encoded POST Request පිලිබඳ ඉගෙන ගමු. ඔබට මතක ඇති පසුගිය පාඩමෙන් අපි ඉගෙන ගත්තා GET request query පිලිඳව. එහිදී අපි URL එකට පසුව '?' ලකුනක් භාවිතා කර ඊට පසුව query parameter ලබාදීම සිදු කරා. query parameter දෙකකට වඩා ඇති අවස්ථා වලදී & ලකුණ භාවිතා කර query parameters වෙන් කිරීම සිදු කරා. උදා:
  1. http://localhost:3000/project_1/task?taskId=task12
    1. Query Parameter = taskId, Value = task12
  2. http://localhost:3000/project_1/task?taskId=task12&assignee=user12DC5
    1. Query Parameter = taskId, Value = task12
    2. Query Parameter = assignee, Value = user12DC5
    URL Encoded POST request වලදීද සිදුවන්නේද අපි Form එකකට ඇතුලත් කරන දත්ත Query String ආකාරයට POST Request  එකේ Body එකට එකතු වීමයි.  උදාහරණයක් ලෙස පහත ආකාරයේ Form එකකට දත්ත ඇතුලත් කරන විට

එම දත්ත:
 email=testemail@email.com&password=testpassword123
එකට පරිවර්තනය වෙයි. නමුත් මෙම දත්ත Request Body එකට අතුලත්වී තිබෙන නිසා Server එකේදී පමනක් බලාගැනීමේ හැකියාව තිබෙන අතර මේ සඳහා අපේ Server එක සකසා තිබිය යුතුය. අපි බලමු දැන් කොහොමද URL Encoded POST request සඳහා Server එක සකසා ගන්නේ කෙසේද කියල.
    දැන් පෙර පරිදිම Server file එකක් සාදාගෙන Express.js install කරගන්න. ඉන් පසුව Server file එකට Express.js import කරගෙන Express Sever එක 3000 Port එකේ Run කරගන්න. දැන් Server file එක පහත ආකාරය වේ.

    const express = require('express');
    const app = express();

    app.listen(3000, (err) => {
        console.log("Server Running");
    });

දැන් පහත පරිදි POST request එකක් Server එකට ලබා ගතහැකි Endpoint එකක් සාදාගන්න. පෙර පාඩමේ අපි භාවිතා කල app.get වෙනුවට මෙහිදී අපි app.post භාවිතා කරයි.

    app.post("/register", (request, response) => {
        console.log("POST request");
        response.send("POST request successful");
    });

දැන් ඔබගේ REST Client එක භාවිතා කර. localhost:3000/register URL එකට POST Request එකක් යවන්න. එවිට ඔබට පහත පරිදි "POST request successful" response එක දැකගැනීමට හැකියි.
    
    ඉහත උදාහරණයේදී අපි POST Request එකක් Server එකට යැවීම සිදුකලද Request එක සමග දත්ත යැවීමක් සිදු කලේ නැත. මීලගට POST Request එක හරහා URL Encoded දත්ත යැවීම සම්බන්ධව අද්‍යනය කරමු.

    Express.js භාවිතයේදී අපිට ලැබී ඇති වාසියක් නම්, URL Encoded දත්ත Server එකේ දී කියවා ගැනීමට Express.js විසින්ම urlencoded() නම් function එකක් ලබාදී තිබීමයි. දැන් පහත කොටස Server file එකට අතුලත් කරන්න.
app.use(express.urlencoded({extended: true}));

එවිට සම්පූර්න Server file එක පහත ආකාරයට වේ.
    const express = require('express');
    const app = express();

    app.use(express.urlencoded({extended: true}));

        app.post("/register", (request, response) => {
        console.log(request.body);
        response.send("POST request successful");
    });

    app.listen(3000, (err) => {
        console.log("Server Running");
    });

    දැන් REST Client එක භාවිතා කර POST Request එකක් දත්ත සමග Server එකට යැවීම සිදුකල යුතුය. මේ සඳහා Request එකේ Header එක ලෙස:
Content-Type: application/x-www-form-urlencoded

ලබා දිය යුතු අතර Request Body එක ලෙස URLencoded form data තෝරා දත්ත ලබාදීම සිදුකල යුතුය. මෙහිදී:
name=Nilupul හා age=27
ලෙස දී ඇත.


මෙම Request එක Server එකට යැවූ විට Console/Terminal එකෙහි අපි ඇතුලත් කල දත්ත සටහන්වී අති බව පෙනෙයි.



ඉහත ආකාරයට app.use භාවිතා කිරීමෙන් Server එකට පැමිනෙන සියලුම POST Request, URL encoded ලෙස උපකල්පනය කර ඒවා කියවීමට හැකි දත්ත බවට පරිවර්තනය කිරීමට උත්සාහ දරයි. මෙහිදී ඇතැම් විට Server එකේ Errors අතිවීමට ඉඩකඩ අති බැවින් app.use ඉවත් කර අපිට අවශ්‍ය Request එකේදී පමනක් urlencoded() function එක ක්‍රියාත්මක වීමට ඉඩ සලසා දීමට හැකිය. ඒ සදහා:
app.use(express.urlencoded({extended: true})); ඉවත් කර
පහත පරිදි "/register" Endpoint එක වෙනස් කරන්න.

app.post("/register", express.urlencoded({extended: true}), (request, response) => {
console.log(request.body);
response.send("POST request successful");
});

මේ ආකාරයට Node.js Server එකක URL encoded POST Request handle කිරීම සිදුකරගත හැකිය.

JSON POST Request:

    JSON යනු POST request හි භාවිතා කළ හැකි තවත් ආකාරයක් වේ. මෙහිදී අපි ඇතුලත් කරන දත්ත JSON String එකක් බවට පත්වී එය Request Body එකට එක්වී Server එකට ගමන් කිරීම සිදුවේ. උදාහරණයක් ලෙස පහත ආකාරයේ Form එකකට දත්ත ඇතුලත් කරන විට,

එම දත්ත,
"{"email":"testemail@email.com","password":"testpassword123"}"

පරිවර්තනය වී එම JSON String එක Request Body එකට එක් වී Server එකට ගමන් කිරීම සිදුවේ. එය Server එක තුලදී කියවා ගැනීමට Express.js මගින් ඉතා ප්‍රයෝජනවත් json() function එක ලබාදී තිබේ. මෙහිදී පෙර පරිදිම app.use(express.json()); භාවිතා කිරීමේ හැකියාව තිබුනද එය භාවිතා කිරීමෙන් Server එකට පැමිනෙන සියලුම POST request, JSON ලෙස සලකා දත්ත Server එකේදී කියවීමට හැකි ආකාරයට පරිවර්තනය කිරීමට තැත් කරයි. මෙහිදී Server එකේ Errors ඇතිවීමට හැකියාව වැඩි බැවින් අපි අදාල ස්ථානයේදී පමනක් json() function එක භාවිතා කරන ආකාරය සලකා බලමු. මේ සඳහා පහත ලෙස Server file එක වෙනස් කරගෙන Server එක Run කරගන්න.
    const express = require('express');
    const app = express();

    app.post("/register", express.json(), (request, response) => {
        console.log(request.body);
        response.send("POST request successful");
    });

    app.listen(3000, (err) => {
        console.log("Server Running");
    });

    දැන් REST Client එක භාවිතා කර POST Request එකක් දත්ත සමග Server එකට යැවීම සිදුකල යුතුය. මේ සඳහා Request එකේ Header එක ලෙස:
Content-Type: application/json

ලබා දිය යුතු අතර Request Body එක ලෙස JSON තෝරා දත්ත ලබාදීම සිදුකල යුතුය. මෙහිදී:
name=Nilupul හා age=27
ලෙස දී ඇත.

මෙම Request එක Server එකට යැවූ විට Console/Terminal එකෙහි අපි ඇතුලත් කල දත්ත සටහන්වී අති බව පෙනෙයි.

මේ ආකාරයට Node.js Server එකක JSON POST Request handle කිරීම සිදුකරගත හැකිය.

URL Encoded OR JSON?

    URL Encoded හා JSON අතරින් නම්‍යශීලීභව සහ භාවිතයට පහසු ආකාරය නම් JSON භාවිතා කිරීමයි. නමුත් සාමාන්‍ය HTML Form එකක් දත්ත යැවීම URL Encoded ආකාරයට සිදු කරයි. එම නිසා JSON භාවිතා කිරීමේදී HTML Form එකේ තිබෙන දත්ත ඔබ විසින් JSON බවට පරිවර්තනය කර යැවීමට සිදුවේ. එමගින් මෙම ක්‍රම දෙකේදීම වාසි හා අවාසි ඇතිබව වැටහෙයි. මෙය සැලකිල්ලට ගෙන මෙම ක්‍රම දෙකෙන් ඔබට රුචි ක්‍රමයක් තෝරාගෙන Server Development කල හැක.

    මෙම පාඩමෙන් ඔබට Node.js භාවිතා කර POST request handle කරන ආකාරය ඉගෙන ගැනීමට හැකිවූ අතර, මෙම පාඩමේ හා පෙර පාඩමේ උගත් කරුනු එකතු කර සරල Website එකක් සකසා ගන්නා ආකාරය ඊලග පාඩමේදී සලකා බලමු.


නිලුපුල් සංදීප 16-06-2021

Comments

Popular posts from this blog