fb_ads

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

เริ่มต้นพัฒนา Web App ด้วย ReactJS แบบไม่ต้องใช้ create react app

สำหรับนักพัฒนาเว็บที่ใช้ ReactJS เป็นเครื่องมือ มักจะคุ้นชินกับการใช้ create react app ซึ่งคือชุดคำสั่งเริ่มต้นสำหรับพัฒนาเว็บด้วย ReactJS แต่เราก็สามารถพัฒนา Web Application ด้วย ReactJS โดยไม่ต้องใช้ create react app ได้ดังนี้

1. เปิด Command Prompt สร้าง Folder สำหรับงาน ชื่อ react_web_app ด้วยคำสั่ง md react_web_app

2. สร้างไฟล์ package.json โดยคำสั่ง npm init -y

3. intsall node package babel สำหรับ แปลง jsx ไฟล์ js โดยใช้คำสั่ง npm install @babel/core @babel/cli @babel/preset-react

 

4. สร้าง Folder src สำหรับ เก็บ source code ไฟล์ .jsx  และ  Forder js สำหรับ เก็บไฟล์ที่ babel แปลงไฟล์ .jsx เป็น .js โดยใช้คำสั่ง md src และ md js ตามลำดับ

หมายเหตุ ในที่นี้เราจะพัฒนา web app ด้วย React โดยการ เขียน code ในไฟล์ .jsx และใช้ ิbabel แปลงเป็น javascript ในไฟล์ .js อีกที

5. เปิด VS code ด้วย คำสั่ง code -n .

6. สร้างไฟล์ index.html ใน vs code ( คลิกขวา และเลือก new file ตามรูป )


6. เขียน Code html ดังนี้

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My React Web</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" />
    <!--  เรีกยกใช้ React Library -->
    <script src="https://unpkg.com/react@latest/umd/react.production.min.js" crossorigin="anonymous"></script>
    <script src="https://unpkg.com/react-dom@latest/umd/react-dom.production.min.js"></script>

  </head>
  <body>

    <div id="root"></div>
    <!-- babel จะสร้าง ไฟล์ app.js จากไฟล์ app.jsx  -->
    <script src="js/app.js" ></script>

  </body>
</html>

7.  สร้างไฟล์ app.jsx ที่ folder src โดยคลิกขวาที่ folder  src และเลือก new file ตามรูป


8. เขียนคำสั่งสร้างหน้าเว็บด้วย React ดังนี้

function App()
{
    return <div>
        My React Web
    </div>;
}

ReactDOM.render(<App />,document.getElementById("root"));

9. เปิด Command Prompt อีกครั้ง  และพิมพ์คำสั่ง 

npx babel --watch src --out-dir js --presets @babel/preset-react


คือการแปลง ไฟล์ source code ในไฟล์ src เป็น javascript ( .js ไฟล์ ) ใน folder js


 10. เปิด folder D:\react_web_app และเปิดไฟล์ index.html จะได้ หน้าเว็บที่พัฒนาด้วย ReactJS ผลลัพธ์ตามรูป




 


ให้ผู้ใช้ Download ไฟล์รูปทีละหลายไฟล์บนหน้าเว็บ ด้วย JSZip

ในบางครั้งผู้ใช้ต้อง Download ไฟล์ รูปจากหน้าเว็บทีละหลายๆรูป 

เราสามารถช่วยผู้ใช้ได้ด้วยการสร้าง Zip File รูปภาพ ให้ผู้ใช้ Download รูป ได้ด้วย javascript

ในตัวอย่างนี้ใช้ Library จาก https://stuk.github.io/jszip/  และ https://github.com/eligrey/FileSaver.js/

ผลลัพธ์ที่ได้คือ https://xn--12cb3ech1bdffb0m0b3iuam.net/js_zip/js_zip.html

<html>
    <head>
        <meta charset="utf-8" />
        <!-- เรียกใช้งาน library FileSaver --->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js" ></script>
        <!-- เรียกใช้งาน library jszip js --->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.min.js" ></script>
        <!-- เรียกใช้งาน bootstrap css --->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" />
    </head>
    <body>
        
        <div class="container">
            <h1>ตัวอย่างโดย www.รับเขียนโปรแกรม.net</h1>
            <!-- สร้างแถวรูปภาพ --->
            <div class="row">
                <div class="col-sm-4">

                        <div class="card">
                            <div class="card-body text-center">
                                <!-- แสดงรูปภาพ โดยกำหนด id เป็น img1 --->
                                <img id="img1" src='screen1.png' style="max-width: 100%" />
                                <!-- สร้าง check box โดยกำหนด id เป็น img1_check --->
                                <input type="checkbox" id="img1_check"  /> เลือก
                            </div>
                            
                        </div>

                </div>

                <div class="col-sm-4">

                    <div class="card">
                        <div class="card-body text-center">
                            <!-- แสดงรูปภาพ โดยกำหนด id เป็น img2 --->
                            <img id="img2" src='screen2.png' style="max-width: 100%" />
                            <!-- สร้าง check box โดยกำหนด id เป็น img2_check --->
                            <input type="checkbox" id="img2_check"  /> เลือก
                        </div>

                    </div>

                </div>

                <div class="col-sm-4">

                    <div class="card">
                        <div class="card-body text-center">
                            <!-- แสดงรูปภาพ โดยกำหนด id เป็น img3 --->
                            <img  id="img3" src='screen3.png' style="max-width: 100%" />
                            <!-- สร้าง check box โดยกำหนด id เป็น img3_check --->
                            <input type="checkbox" id="img3_check"  /> เลือก
                        </div>

                    </div>

                </div>

            </div>
            <br />
            <div class="text-center">
                <!-- สร้าง ปุ่ม Download Zip โดย เมื่อกด แล้วจะไปทำงานที่ function download_zip()  --->
                <button class="btn btn-primary" type="button" onclick="download_zip()">
                    Download Zip
                </button>
            </div>

        </div>
        
        <script>

            //สร้าง function  สำหรับ Download Zip ไฟล์
            async function download_zip()
            {
                var zip = new JSZip();//สร้าง instance ของ object JSZip

                var response=null;
                var imageBlob=null;

                if(document.getElementById("img1_check").checked)
                {
                    //ถ้ามีการเลือก รูปที่ 1 ให้เพิ่มรูปที่ 1 ไปใน Zip ไฟล์
                    response = await fetch(document.getElementById("img1").src)
                    imageBlob = response.blob();
                    zip.file("img1.png", imageBlob, {base64: true});//ตั้งชื่อไฟล์รูปว่า img1.png
                }

                if(document.getElementById("img2_check").checked)
                {
                    //ถ้ามีการเลือก รูปที่ 2 ให้เพิ่มรูปที่ 2 ไปใน Zip ไฟล์
                    response = await fetch(document.getElementById("img2").src)
                    imageBlob = response.blob();
                    zip.file("img2.png", imageBlob, {base64: true});//ตั้งชื่อไฟล์รูปว่า img2.png
                }

                if(document.getElementById("img3_check").checked)
                {
                    //ถ้ามีการเลือก รูปที่ 3 ให้เพิ่มรูปที่ 3 ไปใน Zip ไฟล์
                    response = await fetch(document.getElementById("img3").src)
                    imageBlob = response.blob();
                    zip.file("img3.png", imageBlob, {base64: true});//ตั้งชื่อไฟล์รูปว่า img3.png
                }

                zip.generateAsync({type:"blob"}).then((content)=> {
                    //สั่งให้ Browser Download ไฟล์ Zip โดยตั้งชื่อว่า pictures.zip
                    saveAs(content, "pictures.zip");
                });
                
            }

        </script>
    </body>
</html>

 

ผลลัพธ์ที่ได้คือ https://xn--12cb3ech1bdffb0m0b3iuam.net/js_zip/js_zip.html

เขียนโปรแกรมส่ง Email ผ่านเว็บโดยใช้ PHP ด้วย PHPMailer

การสื่อสารกับผู้ใช้บนเว็บนับว่าเป็นสิ่งงสำคัญมาก สำหรับ Web Application ระบบที่ดีควรมรการแจ้งเตือนผู้ใช้ด้วยช่องทางใดช่องทางหนึ่ง

ในบทความนี้จะแสดงตัวอย่างการส่ง Email โดยใช้ PHP ด้วย PHPMailer ดังนี้

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

1. Download PHPMailer  จาก www.รับเขียนโปรแกรม.net/PHPMailer.zip แล้วแตก Zip เพื่อให้ PHP เรียกใช้งาน

 

2. ทดลองเขียน Code สำหรับส่ง Email 

<?php


    //เรียกใช้ PHPMailer
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;

    require 'PHPMailer/PHPMailer.php';
    require 'PHPMailer/SMTP.php';
    require 'PHPMailer/Exception.php';

    date_default_timezone_set('Asia/Bangkok');

    
    //สร้าง Object PHPMailer
    $mail = new PHPMailer;
    //กำหนด Email ต้นทาง และชื่อเจ้าของ Email
    $mail->setFrom('จาก Email อะไร', 'ชื่อ ของเจ้าของ Email');
    //กำหนดว่าต้องการให้ Reply Email ไปที่ไหน
    $mail->addReplyTo('กำหนดให้ Reply Email ไปที่ไหน','ชื่อ เจ้าของ Email ที่กำหนดให้ Reply');
    //กำหนด Email ที่ต้องการให้ส่งไป
    $mail->addAddress('ส่งไปที่ Email ไป');
    //กำหนดหัวข้อ Email
    $mail->Subject = 'ทดสอบส่ง Email ด้วย PHPMailer '.date("d/m/Y");
    //Read an HTML message body from an external file, convert referenced images to embedded,
    //ใส่เนื่องหา Email โดยสามารถใส่ในรูปแบบ HTML ได้
    $mail->msgHTML("ทดสอบส่ง Email ".date("d/m/Y")." <br /> <b><u>ด้วย PHPMailer</u></b>");
 
    $mail->CharSet = 'UTF-8';
    

    //ส่ง Email
    if (!$mail->send()) {
        echo 'Mailer Error: '. $mail->ErrorInfo;
    } else {
        echo 'Message sent!';
    }

?>

 

หมายเหตุ  หากทดสอบ ที่ localhost ผ่าน XAMPP ไม่สามารถทำได้ แนะนำให้ ทดสอบ บน server จริง

ทดลองส่ง Email ผ่านเว็บจากของ Godaddy Hosting

1. ไปที่ Control Panel  (CPanel)  ของเว็บ



2. ไปที่ตัวจัดการไฟล์ ของ Cpanel แล้วเลือก Upload
 
3. Download ไฟล์จาก www.รับเขียนโปรแกรม.net/php_mailer.zip แล้ว Upload ขึ้น server
 
4.  แตก Zip ไฟล์ที่ server
 
 
5. ทดลองรัน Code บน Browser
 



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

สำหรับกำารสร้าง Web Application ที่เกี่ยวข้องกับ ฐานข้อมูล การ export ข้อมูลจาก database ออกมาเป็นไฟล์ excel นั้นจะช่วยให้ผู้ใช้นำข้อมูลที่ได้ไปวิเคราะห์ต่อได้สะดวกขึ้น ในตัวอย่างนี้จะเป็นการนำข้อมูลจาก MySql ออกมาแสดงในหน้าเว็บ ด้วย PHP และให้ผู้ใช้สามารถ Download เป็น ไฟล์ excel ได้ดังนี้

Link ที่เกี่ยวข้อง การอ่านข้อมูลจากไฟล์ excel โดยใช้ PHP

รับเขียนโปรแกรม PHP ออกรายงานเป็น excel

<?php
    /*กำหนด username password และ database name ของ mysql */
    $servername = "localhost";
    $username = "....";
    $password = "....";
    $dbname = "....";

    /*------เชื่อมต่อ Database----*/
    $conn = new mysqli($servername, $username, $password, $dbname);
    
    if ($conn->connect_error) {
      die("Connection Error: " . $conn->connect_error);
    }

    /*------ถ้ายังไม่มีตาราง ให้สร้างตาราง ชื่อ food----*/
    $sql = "CREATE TABLE IF NOT EXISTS food  (
        food_name VARCHAR(100),
        price INT(5)

    )";

    $conn->query($sql);

    $sql = "SELECT * FROM food";
    $result = $conn->query($sql);

    if ($result->num_rows == 0)
    {
          /*----ถ้ายังไม่มีข้อมูลในตาราง food ให้เพิ่มข้อมูลเข้าไป----*/

        $sql = "INSERT INTO food (food_name, price)
        VALUES ('Hamburger', '199')";
        $conn->query($sql);

        $sql = "INSERT INTO food (food_name, price)
        VALUES ('Pizza', '399')";
        $conn->query($sql);

        $sql = "INSERT INTO food (food_name, price)
        VALUES ('Doughnut', '59')";
        $conn->query($sql);

    }

 /*สร้างปุ่มสำหรับ Download ไฟล์ excel โดยกำหนดว่าเมื่อกดปุ่ม Downlaod แล้วจะทำงานที่ javascript function ชื่อว่า ExcelReport()*/
     echo "<a href='#' id='download_link' onClick='javascript:ExcelReport();''>Download</a>";

    echo "<table id='myTable'>";
         echo "<tr>";
                echo "<td>Food Name</td>";
                echo "<td>Price</td>";
        echo "</tr>";
    /*นำข้อมูลจากตาราง food มาแสดง*/
    $sql = "SELECT * FROM food";
    $result = $conn->query($sql);
    while($row = $result->fetch_assoc())
    {
        echo "<tr>";
            echo "<td>$row[food_name]</td>";
            echo "<td>$row[price]</td>";
        echo "</tr>";
    }
    echo "</table>";

    $conn->close();

?>
<!-- เรียกใช้ javascript สำหรับ export ไฟล์ excel  -->
<script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"  ></script>
<script src="https://unpkg.com/file-saver@1.3.3/FileSaver.js"  ></script>

<script>
function ExcelReport()//function สำหรับสร้าง ไฟล์ excel จากตาราง
{
    var sheet_name="excel_sheet";/* กำหหนดชื่อ sheet ให้กับ excel โดยต้องไม่เกิน 31 ตัวอักษร */
    var elt = document.getElementById('myTable');/*กำหนดสร้างไฟล์ excel จาก table element ที่มี id ชื่อว่า myTable*/

    /*------สร้างไฟล์ excel------*/
    var wb = XLSX.utils.table_to_book(elt, {sheet: sheet_name});
    XLSX.writeFile(wb,'report.xlsx');//Download ไฟล์ excel จากตาราง html โดยใช้ชื่อว่า report.xlsx
}
</script>
<style type="text/css">

table {
  border-collapse: collapse;
  width:40%;
}

table, th, td {
  border: 1px solid black;
}

</style>


ผลลัพธ์ข้องหน้าเว็บคือ


ข้อมูลใน File Excel จะแสดงดังรูป

 

 


javascript tip เลื่อนตำแหน่งในหน้าเว็บด้วย scrollIntoView


 สำหรับหน้าเว็บที่มีขนาดยาว เพื่อความสะดวกของผู้ใช้ในการแสดงข้อมูล  เราสามารถ ใช้ javascript เพื่อเลื่อนไปยังตำแหน่งต่างๆ ของหน้าเว็บได้โดยใช้ method scrollIntoView ดังนี้


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



<div id="div1" style='height:400px;' ><!-- สร้าง tag div1 ที่มีความยาว 400px -->
<!-- ปุ่ม  เลื่อน  หน้าเว็บลงไปที่ tag div2-->
<button type="button" onclick="goto_div2()" >Goto Div2</button>
</div>

<div id="div2" style='height:400px;'>
 Div2
</div>

<script>

function goto_div2() //function เลื่อนหน้าเว็บไปที่ tag div2
{
    var elmnt = document.getElementById("div2");//สร้าง object element div2
     elmnt.scrollIntoView();//เลื่อนหน้าเว็บไปที่ tag div2
}

</script>



สามารถดูตัวอย่างได้ที่ https://jsfiddle.net/o8t6zs4y/

การใช้งาน JWT ( JSON Web Token ) กับ PHP

การเก็บสถานะของผู้ใช้ว่าเป็นใครในสำหรับระบบที่พัฒนาด้วย PHP ผู้พัฒนาอาจใช้ตัวแปร SESSION ในการเก็บ แต่ยังมีอีกวิธีในการเก็บสถานะของผู้ใช้ว่าเป็นใครเรียกว่าการใช้  JSON Web Token หรือ JWT โดยมีตัวอย่างการใช้งานดังนี้

รับเขียนโปรแกรม PHP JSON Web Token (JWT) 

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

1. Download Library จาก https://github.com/firebase/php-jwt 


2. สร้าง Folder jwt และแตก Zip ไฟล์ code ที่ Download มาไว้ใน Folder src


3. เขียน Code ฝั่ง server ด้วย PHP สำหรับรับส่ง Token ( JWT ) โดยตั้งชื่อไฟล์ว่า token.php

<?php

    //เรียกใช้ Library สำหรับ JWT
    include("src/JWT.php");
    use \Firebase\JWT\JWT;

    //สร้าง function สำหรับ สร้าง Json Web Token โดยรับ String user
    function encode_jwt($user)
    {   //กำหนด key สำหรับ encode jwt
        $key = "my_JWT_key";
        //สร้าง object ข้อมูลสำหรับทำ jwt
        $payload = array(
            "user" => $user,
            "date_time" => date("Y-m-d H:i:s")//กำหนดวันเวลาที่สร้าง
        );
        //สร้าง JWT สำหรับ object ข้อมูล
        $jwt = JWT::encode($payload, $key);
        //เพื่อความปลาดภัยยิ่งขึ้นเมื่อได้ JWT แล้วควรเข้ารหัสอีกชั้นหนึ่ง
        $jwt=encrypt_decrypt($jwt,"encrypt");
        // return token ที่สร้าง
        return $jwt;
    }
    //สร้าง function สำหรับอ่านข้อมูล User จาก JWT ( Token )
    function decode_jwt($jwt)
    {
        //กำหนด key สำหรับ decode jwt โดย
        $key = "my_JWT_key";
        try{
            //ถอดรหัส token
            $jwt= encrypt_decrypt($jwt,"decrypt");
            //decode token ให้เป็นข้อมูล user
            $payload = JWT::decode($jwt, $key, array('HS256'));

        }catch(Exception $e)
        {   //กรณี Token ไม่ถูกต้องจะ return false
            return false;
        }
       
        //return ข้อมูล user กลับไป
        return  (array)$payload;

    }
    // function  สำหรับเข้ารหัส และถอดรหัส token เพื่อความปลอดภัย
    function encrypt_decrypt($str,$action)
    {
        $key = 'my_openssl_KEY';
        $iv_key = 'my_iv_KEY';
        $method="AES-256-CBC";
        $iv=substr(md5($iv_key),0,16);
        $output="";

        if($action=="encrypt")
        {
            $output=openssl_encrypt($str, $method,$key,0,$iv);
        }
        else if($action=="decrypt")
        {
            $output=openssl_decrypt($str, $method,$key,0,$iv);
        }

        return $output;
    }
    //รับ action  จาก client ว่าต้องการรับ token หรือ
    $action=$_POST["action"];
    // client ต้องการรับ token
    if($action=="get_token")
    {
        $user=$_POST["user"];//รับข้อมูล User จาก client
        echo encode_jwt($user);//ส่ง token ไปให้ client
    }
    // client ต้องการ decode token ( อ่านข้อมูล user จาก token )
    if($action=="get_user")
    {
        $token=$_POST["token"];//รับ token จาก client
        $jwt=decode_jwt($token);//decode ข้อมูล user จาก toekn ที่ client ส่งมา
        if(!$jwt)//แสดงว่า token ไม่ถูกต้อง
        {
            $err=array();
            $err["msg"]="Wrong Token !!!";
            echo json_encode($err);
        }
        else
        {   //ส่งข้อมูล user จาก token ที่ client ส่งมากลับไปในรูปแบบ json
            echo  json_encode($jwt);
        }
    }


?>

4. เขียน Code ฝั่ง Client ทดลองรับส่ง encode และ decode token

<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>

<button onclick="get_token()">Get Token</button>&nbsp;<!-- ปุ่มกดรับ token -->
<button onclick="get_user_data_from_token()">Get User Data From Token</button> 
<!-- ปุ่มกดแปลง token เป็นข้อมูลผู้ใช้ -->
<div id="server_response"></div>

<script>

    var token="";
    var server="http://localhost/jwt/token.php";//server URL สำหรับรับ token และ decode token

    function get_token()//function สำหรับรับ token
    {
        $.ajax({
            url:server,
            type:"post",
            data:{action:"get_token",user:"MR.robot"},//ส่งข้อมูล user และกำหนด action เป็น get_token
            success:function(response)
            {
                //เก็บ token ไว้ในตัวแปร token
                token=response.trim();
                //แสดง token <div id="server_response"></div>
                $("#server_response").html("<b>Token:</b>"+token);
            }
        });
    }

    function get_user_data_from_token()//function สำหรับดูข้อมูล User จาก token
    {
        $.ajax({
            url:server,
            type:"post",
            data:{action:"get_user",token:token},//ส่งข้อมูล toekn และกำหนด action เป็น get_user
            success:function(response)
            {  
                //แสดงข้อมูล User จาก Token
                $("#server_response").html("<b>User Data:</b>"+response);
            }
        })
    }

</script>

เมื่อรันผลลัพธ์ที่ได้คือ






ตัวอย่างการพัฒนา Web Application ด้วย NodeJS + Express ( ใช้ EJS เป็น template engine ) สำหรับผู้เริ่มต้น

ExpressJS นับว่าเป็น WebApplication Framework ซึ่งทำงานกับ NodeJs สำหรับการพัฒนาเว็บไซต์ที่ได้รับความนิยมมากในปัจจุบัน ในบทความนี้จะแสดงตัวอย่างการสร้างหน้าเว็บด้วย ทีละขั้นดังนี้

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


1.  สร้าง folder โดยพิมพ์คำสั่ง mkdir my_express_app แล้ว เข้าไปที่  folder ที่สร้างไว้โดยพิมพ์คำสั่ง cd my_express_app


2. install expressJS โดย พิมำ์คำสั่ง npm install express --save


3. เปิด VisualStudio Code โดย แล้วเลือก open folder ให้เลือก folder d:\\my_express_app


4. สร้างไฟล์ index.js




5. พิมพ์  code ในไฟล์ index.js

const express = require('express');//เรียก module express
const path = require('path');

const app = express();//สร้าง object express ชื่อ app
const port = process.env.PORT || 3000;//กำหนดให้ใช้ port 3000



app.get("/", (req, res) => { //แสดงข้อความ Hello World !!! เมื่อเข้ามาที่ http://localhost:3000/

    res.send("Hello World !!!");
   
});

app.listen(port);



6. รัน node js server โดย พิมพ์ node index.js


 เปิด browser โดย พิมพ์ url http://localhost:3000/ หน้าเว็บจะแสดงข้อความ HelloWorld


7.  ที่นี้ลองสร้างหน้าเว็บจาก esj template engine ดู ให้ install ejs module สำหรับอำนวยความสะดวกในในการสร้างหน้าเว็บ


8. สร้าง Folder views สำหรับเก็บ ไฟล์ .ejs ที่เป็น interface



9. สาร้างไฟล์ index.ejs สรำหรับ หน้าเว็บ


10. ในไฟล์ views/index.ejs ให้พิมพ์ html
<!doctype html>
<html >
  <head>
  
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Hello, world!</title>

  </head>
  <body>
    <h1>Hello, world!</h1>

  </body>
</html>


11. แก้หน้า index.js

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

const app = express();
const port = process.env.PORT || 3000;
var contact_page = require('./contact');

app.set("view engine","ejs");// กำหนดให้ express js ใช้ ejs เป็น template engine

app.get("/", (req, res) => {

// กำหนดให้ แสดงหน้าเว็บจาก views/index.ejs เมื่อเข้ามาที่ http://localhost:3000/
    res.render("index");
   
});

app.listen(port);


12. รัน nodejs server อีกครั้ง โดย ไปที่ cd my_express_app และ พิพม์ node index.js เพื่อรันไฟล์ index.js


ผลลัพธ์คือ แสดง Hello World ใน browser ตามรูป


13.  เราจะลองสร้าง หน้า about ดู ให้สร้างไฟล์ about.ejs ในfolder view โดย มี code html ดังนี้
<!doctype html>
<html >
  <head>
  
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>About</title>

  </head>
  <body>
    
    <h1>About</h1>

  </body>
</html>


14. เราจะกำหนดเข้าหน้าเว็บ http://localhost:3000/about ให้แสดง html จาก about.ejs   แก้ไฟล์ index.js โดยเพิ่มคำสั่งดังนี้

 app.get("/about", (req, res) => {

    res.render("about");
  
});

 ( เราเรียกการกำหนด แบบนี้ว่า การกำหนด route )


15.  รัน nodejs ใน comand line โดย พิมพ์ node index.js อีกครั้ง ถ้าเปิด browser ไปที่ http://localhost:3000/about  ใน browser จะแสดงดังรูป


16. ต่อมา หากเราต้องการ สร้าง link ระหว่าหน้า http://localhost:3000/ และหน้า http://localhost:3000/about ให้สร้าง ไฟล์ menu.ejs ใน folder views และสร้าง link ดังนี้

<ul>
    <li><a href="/">Home  </a></li>
    <li><a href="/about">About </a></li>
</ul>



17. ใส่ tag include <% include menu.ejs %> ในไฟล์ index.ejs และabout.ejs เพื่อนำ tag html ในไฟล์ menu.ejs มาแสดง




การเขียนไฟล์เมนูแยกในลักษณะนี้จะช่วยให้ สะดวกในการเพิ่มหน้าในอนาคตโดยสามารถเพิ่มหน้าในไฟล์ menu.ejs ที่เดียวไม่ต้องเพิ่มเมนูในทุกหน้า

ตัวอย่างการส่ง ค่า parameter ไปให้ไฟล์ .ejs 


ในการทำงาน WebApplication บางครั้งเราต้องการที่จะส่งค่า parameter ไปให้ไฟล์ ejs เราสามารถส่งค่า parameter ได้โดยใช้คำสั่ง res.render("ชื่อไฟล์ .ejs",{ชื่อตัวแปร:"ค่าที่จะส่งไป"});


ให้ลองเพิ่ม

res.render("index",{page:"index"});
res.render("about",{page:"about"});

ตามรูป ( ในที่นี้คือาการส่งตัวแปร page ไปให้ไฟล์ index.ejs และ about.ejs )



การนำค่า parameter ที่ส่งมาไปใช้งานเราสามารถนำชื่อตัวแปรที่ส่งมาใช้งานได้เลย
ในไฟล์  menu.ejs ให้แก้ไขใส่เงื่อนไข

<ul>
    <li><a href="/">Home <% if(page=="index"){ %> (Current Page) <% } %> </a></li>
    <li><a href="/about">About <% if(page=="about"){ %> (Current Page) <% } %></a></li>
</ul>

ในที่นี้คือ จะใส่ ข้อความ (Current Page) หลังชื่อเมนูตาม parameter ที่ส่งมา



เมื่อทดลองรัน ข้อความ (Current Page) จะไปอยู่หลังชื่อเมนู



ตัวอย่างการแยกไฟล์ในการจัดการ route

หากเราต้องการแยกไฟล์ จัดการ route ไม่ให้อยู่ในไฟล์ index.js อย่างเดียว ( หากการจัดการ route ไปอยู่ใน index.js ไฟล์เดียวอาจทำให้ยุ่งยากในการแก้ไขได้หากมีหน้าเว็บมากขึ้น  ) เราสามารถแบ่งการจัดการ route ไปอยู่ในไฟล์อื่นดังนี้

1. สร้างไฟล์ contact.js


2. ใส่ code

exports.contact=function(app){
    app.get("/contact", (req, res) => {

        res.send("<h1>Contact Page</h1>");
       
    });
};

ในที่นี้คือ กำหนดให้ แสดงข้อความ <h1>Contact Page</h1>  เมื่อเปิด browser ไปที่ http://localhost:3000/contact


3. แก้ code ในไฟล์ index.js

var contact_page = require('./contact'); //import module ไว้ในตัวแปร contact_page
และ contact_page.contact(app);//



 เมื่อรัน node js แล้ว เปิด http://localhost:3000/contact ใน browser จะได้ข้อความดังนี้



Download Source Code ได้ที่ https://github.com/nuntawa/sample_express_app