fb_ads

www.รับเขียนโปรแกรม.net รับเขียนโปรแกรม ระบบต่างๆ เช่น ระบบข้อมูลบุคคล ระบบข้อมูลลูกค้า ระบบซื้อขาย คลังสินค้า ระบบเช่าจอง ทำงานบน Website ด้วย PHP MySql NodeJs HTML5 JavaScript Ajax

เทคนิคการเขียนคำสั่ง sql ป้องกันเวลาทับซ้อนในระบบจอง


สำหรับระบบการจองนั้น จำเป็นอย่างยิ่งที่จะต้องมีการตรวจสอบไม่ให้การจองมีการทับซ้อนกับเวลาที่มีการจองไว้แล้วในต่อไปนี้นี้คือคำสั่ง sql ตรวจสอบว่าการจองต้องไม่ทับซ้อนกัน



//กำหนดให้ เวลาที่ต้องการจอง อยู่เริ่มจากเวลาจริง $min นาที และเลิกก่อนเวลาจริง $min นาที
//เพราะผู้ใช้จะได้สามารถจองในเวลาถัดไปได้เลย โดยที่ไม่ทับกับการจองก่อนหน้า
$start_time=date('Y-m-d H:i:s', strtotime(' +'.$min.' minutes', strtotime($_POST["start_time"]) ));
$end_time=date('Y-m-d H:i:s', strtotime(' -'.$min.' minutes', strtotime($_POST["end_time"]) ));

//ตัวอย่างคำสั่ง sql สำหรับตรวจสอบการจอง
            $sql="SELECT * FROM reservation
             WHERE(
                   ( (start_time>='".$start_time."')AND(end_time<='".$end_time."') )OR
                   ( (start_time<='".$start_time."')AND(end_time>='".$end_time."') )OR
                   ( (start_time BETWEEN '".$start_time."' AND '".$end_time."') )OR
                   ( (end_time BETWEEN '".$start_time."' AND '".$end_time."') )
            )";

//เวลาที่จองใหม่ต้องไม่คล่อมเวลาที่จองเดิม
(start_time>='".$start_time."')AND(end_time<='".$end_time."')

//เวลาที่จองใหม่ต้องไม่อยู่ในเวลาที่จองเดิม
(start_time<='".$start_time."')AND(end_time>='".$end_time."')

 //เวลาที่จองใหม่ต้องไม่ทับซ้อนเวลาที่จองเดิม
( (start_time BETWEEN '".$start_time."' AND '".$end_time."') )OR
( (end_time BETWEEN '".$start_time."' AND '".$end_time."') )

ถ้ารันคำสั่งตามเงื่อนไขแล้วมีผลลัพธ์มากกว่าหนึ่งแถวแสดงว่าการจองมีการทับซ้อน


ตัวอย่างการทำ Firebase Authentication Login โดย Google Account


Firebase นั้นมี API สำหรับการทำ  Authentication โดย Google Account โดยมีขั้นตอนดังต่อไปนี้


รับเขียนโปรแกรม Firebase Javascript



ไปที่ https://console.firebase.google.com/ 
ดูการตั้งค่าโครงการสำหรับ javascript โดยไปที่รูปเฟืองด้านบนซ้าย
  
 เลือกดูการตั้งค่า Firebase สำหรับ Web เมื่อกดแล้วหน้าเว็บจะขึ้น popup code 
การตั้งค่า ให้ copy code มาไว้ในไฟล์ html ของเว็บ
 

เมื่อตั้งค่า Firebase สำหรับเว็บแล้วให้เลือกแถบ  Authentication ด้านซ้าย



เลือกวิธีการลงชื่อเข้าใช้


เลือก google



เลือกเปิดการใช้งาน

ตัวอย่าง Code การทำ Authentication ด้วย google


<!DOCTYPE html>
<html lang="th">
<head>
  <title>Firebase Google Authentication</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://use.fontawesome.com/releases/v5.5.0/js/all.js" ></script>
 <script src="https://www.gstatic.com/firebasejs/5.5.9/firebase.js"></script>
 
  <script>
    // ตั้งค่า Firebase สามารถ ดูได้ตามรูปที่ 2
    var config = {
      apiKey: "...",
      authDomain: "...",
      databaseURL: "...",
      projectId: "...",
      storageBucket: "...",
      messagingSenderId: "..."
    };
    firebase.initializeApp(config);
  </script>
 
</head>
<body>

<div class="container">
 
    <br /><br />

    <div id="login_panel" class='text-right' >
         <!--  สร้างปุ่มเข้าสู่ระบบโดยกำหนดให้ยังไม่แสดงในครั้งแรก  -->
          <button class="btn btn-primary btn_login "  style="display:none" >
                <i class="fa fa-key" ></i> เข้าสู่ระบบ
         </button>
          <!--  สร้าง span สำหรับ  -->
          <span class="user_info" ></span>
          <!--  สร้าง ออกจากระบบ ระบบโดยกำหนดให้ยังไม่แสดงในครั้งแรก  -->
          <button class="btn btn-danger  btn_sign_out " style="display:none" >
                 <i class="fa fa-sign-out-alt" ></i> ออกจากระบบ
          </button>

    </div>

    <script>

           //bind event กำหนด function การทำงานเมื่อ กดปุ่ม เข้าสู่ระบบ
            $("#login_panel").find(".btn_login").on("click",function(){
                    //เมื่อกดปุ่มเข้าสู่ระบบแล้ว ให้ไปที่ หน้าจอของ google
                    var GoogleAuthProvider = new firebase.auth.GoogleAuthProvider();
                    firebase.auth().signInWithRedirect(GoogleAuthProvider);

            });
           
             //bind event กำหนด function การทำงานเมื่อ กดปุ่มออกจากระบบ
            $("#login_panel").find(".btn_sign_out").on("click",function(){
                //คำสั่ง ออกจการะบบ ของ firebase
                firebase.auth().signOut().then(function() {
                   
                });

            });
            //ชุดคำสั่งของ firebase เมื่อมีการเปลี่ยนแปลงสถานะการ login
            firebase.auth().onAuthStateChanged(function(user) {

                if (user)// เมื่อผู้ใช้อยู่ใน สถานะ login
                {
                    console.log(user);
                    $("#login_panel").find(".btn_login").css("display","none");//ซ่อนปุ่ม เข้าสู่ระบบ
                    $("#login_panel").find(".btn_sign_out").css("display","");//แสดงปุ่ม ออกจากระบบ
                    $("#login_panel").find(".user_info").html(user.displayName);//แสดงชื่อผู้ใช้ ที่ login
                }
                else // เมื่อผู้ใช้ไม่ได้อยู่ใน สถานะ login
                {
                    $("#login_panel").find(".btn_login").css("display","");//แสดงปุ่ม เข้าสู่ระบบ
                    $("#login_panel").find(".btn_sign_out").css("display","none");//ซ่อนปุ่ม ออกจากระบบ
                    $("#login_panel").find(".user_info").html("");//ซ่อนชื่อผู้ใช้

                }
            });

    </script>

</div>
</body>
</html>

let กับ var ต่างกันอย่างไร


การประกาศตัวแปรใน javascript นั้น เราใช้คำสั่ง var ตามด้วย ชื่อตัวแปร
แต่ Javascript ES6 ได้เพิ่ม การประกาศตัวแปรแบบ let  มาด้วยในที่นี้จะอธิบายความแตกต่างระหว่างการประกาศตัวแปรระหว่าง let กับ var

รับเขียนโปรแกรม Javascript


function foo()
{
         var x=0;

         if(true)
        {
             var x = 1;
        }
 
        return x;
}

function bar()
{
         let x=0;

         if(true)
        {
            let x = 1;
         }
 
         return x;
}

alert(foo());//แจ้งเตือน 1
alert(bar());//แจ้งเตือน 0

สรุป 

สำหรับ var

var x=0;

if(true)
{
    var x = 1;
}

x ใน block if กับ x ภายนอกจะถือว่าเป็นตัวเดียวกัน

แต่สำหรับ let 

let x=0;

if(true)
{
     let x = 1;
}
 
 x ใน block if กับ x ภายนอกจะถือว่าเป็นคนละตัวกัน



Jquery Selector แบบต่างๆ

  
การทำ Dynamic Webpage นั้นคือ การที่ Element ต่างๆของ หน้าเว็บ สามารถเปลี่ยนแปลงได้นั้นจำเป็นต้อง select element เพื่อการแก้ไขก่อน ด้วยการ select ของ jQuery

รับเขียนโปรแกรม JQuery

 รับเขียนโปรแกรม Web Application

Select BY Id

$("# id ของ element")

<div id="my_div" ></div>
<script>
      $("#my_div").html("Select By Element Id");
</script>
  •  ผลลัพธ์คือหน้าเว็บจะแสดงคำว่า Select By Element Id
  • $("# id ของ element")  ต้องมี # ด้านหน้าด้วย
  • .html(" ..... ") คือ การใส่ Element เข้าไปภายใต้ element ที่มี id ตาม selector ที่กำหนด

Select By Class 

 $(". class ของ element")

<div class="my_div"></div>
<script>
      $(".my_div").html("Select By Class");
</script>

กรณีที่มี class มากกว่า 1 element 

<div class="my_div"></div>
<div class="my_div"></div>
<script>
      $(".my_div").html("Select By Class");
</script>

  •  $(". class ของ element") ต้องมี . นำชื่อ class ด้วย
  • ผลลัพธ์คือหน้าเว็บจะแสดงคำว่า Select By Class จำนวน 2 แถว เพราะ class ที่มีชื่อว่า my_div มีอยู่ 2 element

 jQuery each+ select By Class
เราสามารถใช้ jQuery each สำหรับการเข้าถึง element ที่ select เจอมากกว่า 1 element

<div class="my_div"></div>
<div class="my_div"></div>
<script>

       $(".my_div").each(function(index,element){

                $(element).html("Element "+index);//index คือ ลำดับที่ของ element

       });

</script>

  • ผลลัพธ์ที่ได้คือ หน้าจอจะแสดง
    Element 0
    Element 1

Select By Property

 $("[ชื่อ property =' ค่าของ property ' ]")


<div><a href="https://youtube.com" ></a></div>
<div><a href="https://facebook.com" ></a></div>
<div><a href="https://google.com" ></a></div>
<script>

    $("[href='https://youtube.com']").html('Youtube');
    $("[href='https://facebook.com']").html('Facebook');
    $("[href='https://google.com']").html('Google');
   
</script>

  • href คือ property ของ element a

Select ซ้อน Select

  $("....").find("...")

<div id="my_div">
       <div class="my_class"></div>
       <div class="my_class"></div>
       <div class="my_class"></div>
</div>

<script>

     $("#my_div").find(".my_class").html("my_div >> my_class");

</script>
  • เมื่อ selector ตัวแรกแล้ว เราใช้ .find เพื่อเลือก element ถัดไป
  • ผลลัพธ์ที่ได้คือ
    my_div >> my_class
    my_div >> my_class
    my_div >> my_class
     
     







Javascript Event Binding

การ Binding Event ใน JavaScript คือ การกำหนดชุดคำสั่งเมื่อเกิดเหตุการณ์ขึ้นกับ Element ในหน้าเว็บ เช่น ผู้ใช้คลิกที่ Element หรือเมื่อผู้ใช้เปลี่ยนตัวเลือกใน Select Element


Javascript Event Binding

 

แบบที่ 1 กำหนด function ที่จะทำงานลงใน element

<button class='btn btn-primary' onclick="click_function()" >OK</button>
<script>
 function click_function() { //กำหนดให้เมื่อผู้ใช้ click ปุ่ม OK
     alert('Click !!!');
}
</script>


แบบที่ 2 ใช้คำสั่ง document.addeventlistener

<button id="my_button" class='btn btn-primary' >OK</button>

<script>

document.getElementById("my_button").addEventListener("click",click_function)

 function click_function() {
     alert('Click !!!');
}

</script>
  • กำหนด id ให้กับ Element ( ในที่นี้ชื่อ my_button ) โดยเมื่อการกำหนด id ให้กับแต่ละ Element จะต้องไม่ซ้ำกัน
  •  document.getElementById("id ของ element").addEventListener("ชื่อ event","ชื่อ function")

jQuery Event Binding

<button id="my_button" class='btn btn-primary' >OK</button>

<script>

$("#my_button").on("click",click_function) ;

 function click_function() {
     alert('Click !!!');
}

</script>

  •  เราใช้ $("#my_button") แทน document.getElementById("my_button")
  • อย่าลืม # นำหน้า id ของ element

ตัวอย่าง "change" event สำหรับ  select element

<select class="form-control" id="my_select" >
       <option value=""></option>
       <option value="1">ตัวเลือกที่ 1</option>
       <option value="2">ตัวเลือกที่ 2</option>
       <option value="3">ตัวเลือกที่ 3</option>
</select>

<script>

$("#my_select").on("change",change_function) ;// เปลี่ยนจาก click event เป็น change event

 function change_function() {
     alert('Select Changed!!!');
}

       
</script>

การติดตั้ง node js แบบต่างๆ

 

  การติดตั้ง module ต่างของ NodeJS นั้นเราจะใช้คำสั่ง npm  install ซึ่งแบ่งเป็นประเภทต่างๆ ดังนี้

  รับเขียนโปรแกรม NodeJS

npm install  -g ชื่อpackage

การใช้คำสั่งการ install ประเภทนี้เรียกว่าการ install แบบ grobal คือเมื่อเรา install แล้วจะสามารถใช้ comand line ของ module นั้นได้โดยไม่ต้องมี node นำหน้า
เช่น npm install -g firebase-tools , npm install -g @angular/cli
 โดยเมื่อเรา install แบบ grobal แล้วสามารถใช้คำสั่ง firebase init สำหรับ npm install -g firebase-tools  หรือ ng new my-app สำหรับ npm install -g @angular/cli

npm install ชื่อpackage --save

เป็นการเพิ่ม module เข้าไปในโปรเจค โดยจะเพิ่ม Dependencies  เข้าไปในไฟล์ package.json ด้วย
เช่น npm install express --save ซึ่งเมื่อ install แล้วเราสามารถใช้คำสั่ง var express = require('express') ได้

npm install  ชื่อpackage ( ไม่มี --save )

เป็นการเพิ่ม module เข้าไปในโปรเจค โดยจะไม่เพิ่ม Dependencies  เข้าไปในไฟล์ package.json

การใช้งาน Firebase Hosting

จากที่เราได้ทดลองสร้าง REST API โดยใช้ firebase cloud function  แล้วตาม ตัวอย่างการพัฒนา API บน Firebase Cloud Function ด้วย NodeJS และ ExpressJS และ ตัวอย่างการพัฒนา API บน Firebase Cloud Function ตอน 2 Token Authentication ( JSON Web Token )

รับเขียนโปรแกรม Firebase 


ต่อไปจะเป็นการใช้งาน Firebase Hosting ( บริการ Web Hosting ไว้บนระบบ cloud ของ firebase )

1. เปิด command line สร้าง directory ชื่อ my-firebase-app โดยใช้คำสั่ง mkdir my-firebase-app หรือ md my-firebase-app บน windows จากนั้น install firebase-tools  โดยใช้คำสั่ง sudo npm install -g firebase-tools แล้วใส่ password ของเครื่อง ( สำหรับ windows ไม่ต้องมีคำสั่ง sudo นำหน้าก็ได้ )

 2.  เมื่อ install firebase-tools แล้วให้ login เข้าสู่ firebase  โดยใช้คำสั่ง firebase login

 3. ใน browser ให้กดอนุญาตตามรูป

  


 4. ไปที่เว็บ https://firebase.google.com/

 

 5. ไปที่เมนู Hosting และกดเริ่มต้นใช้งาน


 6. กดถัดไป

 7. เปิด command line พิมพ์ cd my-firebase-app แล้วพิมพ์คำสั่ง firebase init เพื่อเชื่อมโยง folder เข้ากับโปรเจคของ firebase


8. เลือกโปรเจคของ firebase ที่ต้องการใช้ hosting

 
 
9.  พิมพ์ yes เพื่อให้ firebase สร้าง folder public สำหรับ ใส่ไฟล์เว็บ

 


  
10. ใน folder my-firebase-app จะมี folder public และใน folder public index.html ซึ่งคือไฟล์เริ่มต้นของหน้าเว็บ สามารถแก้ไขโดย คลิกขวาที่ไฟล์ index.html แล้วเลือก Open With เลือกโปรแกรม visual studio code


 

11.  แก้ไขหน้าเว็บด้วยตามต้องการ

 

12. เราสามารถ แสดงหน้าเว็บแบบ local โดยคำสั่ง firebase serve

 

13.  หากเราต้องการ Deploy เว็บไซต์ไปที่ server ของ firebase เราสามารถใช้ คำสั่ง firebase deploy  เพื่อ upload เว็บไซต์ขึ้นสู่ firebase

Javascript Tip วันที่ และเวลา ใน javascript


 Javascript มี object ที่ชื่อว่า Date ชึ่งเอาไว้สำหรับจัดการข้อมูลที่เป็นวันที่ และเวลาในบทความนี้จะแสดงตัวอย่างการใช้งาน object Date ของ javascript ดังนี้

<script>

let date1=new Date();//เก็บข้อมูลวันที่เวลาปัจจุบันไว้ในตัวแปร date1

//คำสั่งจะ retrun date1.getFullYear(); รับค่าปีปัจจุบัน
//คำสั่งจะ retrun date1.getMonth(); รับค่าเดือนปัจจุบัน ( โดยเดือนมกราจะมีค่าเป็น  0 )
//คำสั่งจะ retrun date1.getDate(); รับค่าวันปัจจุบัน ( 1-31 )
//คำสั่งจะ retrun date1getHours(); รับค่าชั่วโมงปัจจุบัน(โดย 0 คือเวลาเที่ยงคืน  และ 23 คือเวลาห้าทุ่ม)
//คำสั่งจะ retrun date1.getMinutes(); รับค่านาทีปัจจุบัน (0-59)
//คำสั่งจะ retrun date1.getSeconds(); รับค่าวินาทีปัจจุบัน (0-59)
//คำสั่งจะ retrun date1.getDay(); รับค่าวันของสัปดาห์ปัจจุบัน (โดย 0 คือวันอาทิตย์ และ 6 คือวันเสาร์ )

date1=new Date(1999,11,31,23,59,59);
//คือ การกำหนด object date สำหรับวันที่ 31 ธันวาคม 1999 เวลา ห้าทุ่ม ห้าสิบเก้านาที ห้าสิบเก้าวินาที

date1.setDate(date1.getDate()+3);//เพิ่มวันที่ไป 3 วันจากวันที่ปัจจุบัน

//โดยหาก date1.setDate(date1.getTime()+(3*60000)); หมายถึง เพิ่มเวลาไป 3 นาที จากวิลาปัจจุบัน
//( ซึ่ง 60,000 หมายถึง มิลิวินาทีซึ่ง คือ 1 นาที )

var d = new Date();
var n = d.getTime(); //get time จะ return จำนวนเต็มที่เป็น TimeStamp  ของเวลาปัจจุบัน
  
d = new Date(1434224613052);//สร้าง  object date จากเลข TimeStamp
//d.getFullYear();แสดง return ปีจากตัวเลข TimeStamp
//d.getMonth(); จะ return เดือนจากตัวเลข TimeStamp

</script>

การอ่านข้อมูลจากไฟล์ excel โดยใช้ PHP

 
Excel นั้นมีความสำคัญมากในการเก็บข้อมูลระบบงานต่างๆในปัจจุบัน จึงมีความสัญคัญมากในการพัฒนา WebApplication ที่สามารถอ่านข้อมูลจากไฟล์ Excel ได้ โดยในที่นี้จะแสดงวิธีอ่านข้อมูลในไฟล์ Excel โดยใช้ PHP 

 Link ที่เกี่ยวข้อง ตัวอย่าง Export รายงานเป็น Excel บนหน้าเว็บ ด้วย PHP MySql และ Javascript

1. Download excel reader จาก https://รับเขียนโปรแกรม.net/excel_reader.zip
 โดยข้อมูลในไฟล์จะมีดังนี้

2. สร้างไฟล์ excel ตามรูป โดยบันทึกเป็นชื่อ test_excel.xlsx แล้วบันทึกไว้ใน folder ที่จะเขียนโปรแกรม


3. แตกไฟล์ excel_reader.zip เอาไว้ในโฟล์เดอร์ที่เราจะเขียนโปรแกรมและสร้างไฟล์ index.php สำหรับเขียนโปรแกรมอ่านข้อมูลจากไฟล์ excel

4. เขียน code อ่านข้อมูลจากไฟล์ excel มาแสดง

<?php
    require_once "excel/PHPExcel.php";//เรียกใช้ library สำหรับอ่านไฟล์ excel
        $tmpfname = "test_excel.xlsx";//กำหนดให้อ่านข้อมูลจากไฟล์จากไฟล์ชื่อ
       //สร้าง object สำหรับอ่านข้อมูล ชื่อ $excelReader
        $excelReader = PHPExcel_IOFactory::createReaderForFile($tmpfname);
        $excelObj = $excelReader->load($tmpfname);//อ่านข้อมูลจากไฟล์ชื่อ test_excel.xlsx
        $worksheet = $excelObj->getSheet(0);//อ่านข้อมูลจาก sheet แรก
        $lastRow = $worksheet->getHighestRow(); 
       //นับว่า sheet แรกมีทั้งหมดกี่แถวแล้วเก็บจำนวนแถวไว้ในตัวแปรชื่อ $lastRow
   
        echo "<table>";
        for ($row = 1; $row <= $lastRow; $row++)//วน loop อ่านข้อมูลเอามาแสดงทีละแถว
       {
           echo "<tr><td>";
             echo $worksheet->getCell('A'.$row)->getValue();//แสดงข้อมูลใน colum A
           echo "</td><td>";
              echo $worksheet->getCell('B'.$row)->getValue();//แสดงข้อมูลใน colum B
            echo "</td><tr>";
        }
        echo "</table>";   
?>

เมื่อรันแล้วผลลัพธ์จะได้ตามรูป






ตัวอย่างการพัฒนา API บน Firebase Cloud Function ตอน 2 Token Authentication ( JSON Web Token )

จากโพสที่แล้ว ตัวอย่างการพัฒนา API บน Firebase Cloud Function ด้วย NodeJS และ ExpressJS ในโพสนี้เราจะเพิ่ม การทำ Token Authentication สำหรับความปลาดภัยในการทำ REST API โดย Firebase และ NodeJS โดยมีขั้นตอนดังนี้
1. เพิ่ม Module jsonwebtoken




โดยพิมพ์คำสั่ง npm install jsonwebtoken

2. แก้  code ไฟล์ index.js

const functions = require('firebase-functions');
const express =require("express");

const cors = require('cors')({origin: true});//เพื่อให้สามารถเรียกใช้งาน API ข้าม Domain  ได้

const app=express();//สร้าง  object express สำหรับ http request

const jwt = require('jsonwebtoken');//สร้าง object json web token สำหรับทำ Authentication

//สร้าง api  function  โดยตรวจสอบ token ก่อน
app.get("/api/authen/:token",(request, response) => { //:token คือ ค่าของ token ที่ส่งมา

    //cors เพื่อให้เราสามารถเรียกใช้งานข้าม Domain ได้
    cors(request, response, () => {

        //ตรวจสอบ token
        jwt.verify(request.params.token, 'secretkey', (err, authData) => {

            if(err)//กรณี Toekn ไม่ถูกต้อง
            {
                response.sendStatus(403);
            }
            else
            {
                response.json({
                    message: 'API',
                    authData
                });
            }
        });
    });

 });
//สร้าง api  function สำหรับรับ token
 app.get("/api/get_token",(request, response) => {
    //cors เพื่อให้เราสามารถเรียกใช้งานข้าม Domain ได้
    cors(request, response, () => {
        //ตัวอย่าง user
        const user = {
            id: 1,
            username: 'Job',
            email: 'jobnuntawat@www.com'
        }

        jwt.sign({user}, 'secretkey',(err,token)=>{//สร้าง token ของ user

            if(err)
            {
                response.send("Error !! ");
            }
            else
            {
                response.json({token}); //ส่ง token กลับไปให้ client
            }
           
        });

    });
  

 });

 exports.app = functions.https.onRequest(app);





3. ทดลองรัน local โดยพิมพ์คำสั่ง firebase serve --only functions












4. ทดลองเปิด browser โดยเรียก function รับค่า token โดยเรียก /app/api/get_token โดยใน browser จะแสดง token มา




โดยหากเราเรียก  /app/api/authen/ โดยไม่มี token ผลลัพธ์ที่ได้จะเป็น Forbidden

 5. Deploy firebase function โดยพิพมพ์คำสั่ง  npm install --save firebase-functions@lastest
จากนั้น  พิมพ์ firebase deploy


6. ทดลองเรียก api จากภายนอก โดยพิมพ์ code

<script>
var xhttp = new XMLHttpRequest();

//รับค่า token
xhttp.open("GET","https://us-central1-mycloudfunction-788b6.cloudfunctions.net/app/api/get_token", true);
  
xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          // เมื่อ server ส่งข้อมูลกลับมาแล้วเก็บค่า token ไว้ในตัวแปล token
           let token_obj = JSON.parse(xhttp.responseText);
           let token=token_obj.token;
//เรียก /app/api/authen โดย ส่ง token ที่ได้มาไปด้วย
xhttp.open("GET","https://us-central1-mycloudfunction-788b6.cloudfunctions.net/app/api/authen/"+token, true);
        
           xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
               
                
                   //เมื่อ server ส่งข้อมูลกลับมาแล้วให้แสดงข้อมูลตัวอย่าง user
                    document.write(xhttp.responseText);
               
                }
            };
            xhttp.send();
        }
    };
 
    xhttp.send();
</script>

โดยผลลัพธ์ที่ได้เมื่อรันจะได้เป็น json ที่แสดงข้อมูลตัวอย่าง user

{"message":"API","authData":{"user":{"id":1,"username":"Job","email":"jobnuntawat@www.com"},"iat":1536992705}}

ตัวอย่างการพัฒนา API บน Firebase Cloud Function ด้วย NodeJS และ ExpressJS

Firebase มีบริการสำหรับนักพัฒนาในการสร้าง API ด้วย NodeJS เรียกว่า Firebase Cloud Function ในบทความนี้จะพูดถึงขั้นตอนการพัฒนา API บน NodeJS และ ExpressJS ซึ่งจะ Deploy บน Firebase Cloud Function โดยจะอธิบายตั้งแต่ขึ้นตอนการติดตั้งจนถึงการเขียน API Function

รับเขียนโปรแกรม firebase

รับเขียนโปรแกรม NodeJS API

รับเขียนโปรแกรม ExpressJS

โดยเริ่มต้นเราต้องสร้าง Project ใหม่บน firebase ก่อน โดยในที่นี้จะใช้ชื่อว่า myCloudFunction


เปิดการใช้งาน Cloud Function



เปิด Comand Line เพื่อสร้าง Folder งานใหม่ชื่อ firebase โดยพิพมพ์คำสั่ง
md firebase enter
และ
cd firebase enter เพื่อเข้าไปใน folder firebase ที่เราเพิ่งสร้างขึ้นมาใหม่


Install Firebase โดยพิมพ์ npm install -g firebase-tools enter



Login เข้าสู่ Firebase โดยพิมพ์คำสั่ง Firebase Login  enter


Login โดยใช้ Google Account



พิมพ์คำสั่ง firebase init enter พิมพ์ Yes แล้วเลือก Functions


เลือก โปรเจคที่เราได้สร้างเอาไว้ใน Firebase


ในที่นี้เราจะเลือกใช้ ภาษา Javascript ในการเขียน




พิพม์ y แล้วกด enter



เปิด File index.js ใน folder firebase/functions ( Folder firebase  )



โดยจะเป็นการพิพมพ์ข้อความ Hello from Firebase ! 
ทดลองนำ Deploy Code ไปที่ Firebase โดยพิพมพ์คำสั่ง firebase deploy enter 

เมื่อเสร็จแล้วจะขึ้นว่า Deploy complete !



ลองเปิด Browser แล้วลองพิมพ์ URL ของ Funtion 


ต่อไปจะลองใช้งาน Firebase Cloud Function  ร่วมกับ ExpressJS โดยต้อง install ExpressJS ก่อน

ไปที่ Folder  firebase/functions แล้ว install expressJS โดยพิมพ์ npm install express --save


จากนั้น install cors เพื่อให้สามารถเรียก API จากภายนอกได้ โดย พิมพ์ npm install cors



เปิดไฟล์ firebase/functions/index.js อีกครั้งเพื่อสร้าง api โดยในที่นี้จะกำหนดให้เรียก api โดยใช้ URL   https://us-central1-mycloudfunction-788b6.cloudfunctions.net/app/api  method เป็นแบบ GET

ทดลองรัน API Function  แบบ local  โดยพิมพ์ firebase serve --only functions 




 ทดลองโดยเปิด Browser แล้วพิมพ์ URL สำหรับทดสอบ API 


 Deploy function ไปที่ firebase โดย พิมพ์ firebase deploy enter ใน command line


เขียนโปรแกรมทดลองเรียก API จาก Firebase โดยพิมพ์ Code ดังนี้

<script>
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
       
        document.write( xhttp.responseText );
        }
    };
    xhttp.open("GET","https://us-central1-mycloudfunction-788b6.cloudfunctions.net/app/api", true);
    xhttp.send();
</script>

โดยเมื่อรันแล้ว หน้า browser จะพิมพ์ข้อความ API ออกมา