express(nodejs revist)

home

Contents

step 1.1: create a express-ejs app skeleton

            //    package.json
            {
              "name": "express4git",
              "version": "0.0.1",
              "dependencies": {  }
            }

            //   app.js
            var express = require('express')
            var app = express();

            app.set('view engine', 'ejs');

            app.get('/', function(req, res){
                res.render("default")
            })

            var server = app.listen(3000, function(){
                console.log("Listening on port 3000, test 7:50");
            })
            
// views/default.ejs <html> <head> </head> <body> <h1>1.1 express skeleton </h1> <p>including package express, ejs, folder public</p> </body> </html>

lab 12: passing data to ejs

// default12.ejs <h1><%= title %></h1> <ul> <% for (var i = 0; i < fruits.length; i++){ %> <li> <%= fruits[i] %> </li> <% } %> </ul>
            // default12.ejs
            app.get('/', function(req, res){
                res.render("default12", 
                           {
                               title: 'My Favorite Fruits',
                               fruits: ['banana', 'pineapple', 'apple']
                           })
            });
            

lab 21: folder public - reference it

            // public/css/hello.css
            body {
                background-color: lightgray
            }

            // in app13.js, add one line and modify method render
            app.use(express.static('public')
            app.get(.. {
                res.render(default13.ejs)
            }
            
// default13.ejs <head> <link href="css/hell0.css" rel="stylesheet" type="text/css" </head>

lab 22: folder public - html file, route

            
            var path = require('path')
            
            app.get('/', function(req, res){ res.render("default13")})
               
            app.get('/greeting', function(req, res){
                res.sendFile(path.join(__dirname + '/public/html/hello.html'))
            })
            

3.1 send json data to nodejs app, using client tool - ARC

3.2 send HTML form data to nodejs app

lab 41: create the app skeleton for post route, test with a client tool

            // application javascript
            var express = require('express')
            var app = express();
            app.use(express.static('public')
            app.set('view engine', 'ejs');

            app.post('/lab41', function(req, res){
                res.end('post completed, 5:00 pm')
            })

            var server = app.listen(3000, function(){
                console.log("Listening on port 3000, test 5:00 pm");
            })
            

lab 42: post route - get a html form, post form data, get a page back

// form.ejs <html> <head> <link href="css/hello.css" rel="stylesheet" type="text/css"> </head> <body> <h1>4.2 route post lab, form </h1> <p>August 21, 2017, 8:02 am</p> <form action="/lab42" method="post" name="myForm"> First name:<br> <input type="text" name="firstname" value="Mickey"> <br> Last name:<br> <input type="text" name="lastname" value="Mouse"> <br><br> <input type="submit" value="Submit"> </form> </body> </html> // echo.ejs <html> <head> </head> <body> <h1>4.2 route post lab, echo </h1> <p>August 21, 2017, 6:00 am</p> </body> </html>
            // app42.js   modify the routes as below:
            app.get('/lab42',function(req, res){
                res.render('form')    // form.ejs
            })

            app.post('/lab42', function(req, res){
                console.log("enter location post")
                res.render("echo")   // echo.ejs
            })

            

lab 43: passing data to ejs - for html form

// form43.ejs cloned from form42.ejs, adding the following code Most Favor Fruit:<br> <select name="fruit"> <% for (var i = 0; i < myFruits.length; i++){ %> <option value="<%=myFruits[i]%>"><%=myFruits[i] %></option> <% } %> </select> // echo43.ejs just cloned from echo42.ejs...
                // app43.js     cloned app42.js,  modifying the get route
                app.get('/lab43',function(req, res){
                    res.render('form43', {myFruits:['apple', 'banana', 'melon', 'orange']})
                })
            

lab 44: convert the url data from network to the app format in memory

            // app43.js,  add the following code
            ...
            var bodyParser = require('body-parser')
            app.use(bodyParser.urlencoded({extended:false}))

            app.post('/lab43', function(req, res){
                console.log("enter location post for lab43, 7:20 am")
                var fn = req.body.firstname            // application specific
                var ln = req.body.lastname
                var fruit = req.body.fruit
                console.log('data = ' + fn + ' , ' + ln + ' , ' + fruit)
                res.render("echo43")
            })
            

lab 45: ehco the posting data in a html page

// app45.js app.post('/lab45', function(req, res){ console.log("enter location post for lab45, 8:05 am") var fn = req.body.firstname …... var gender = "male" res.render("echo45",{"name": fn, "sex": gender}) }) // echo45.ejs <p>name is <%= name %> </p> <p>sex is <%= sex %> </p>

lab 51: asynchonously get data


            // app5.js
            prepare the route for json data service
            app.get('/data5', function(req, res){
                console.log("enter data5")
                var jsonDog = {"name": "Tairo", "color": "brown"}
                res.json(jsonDog)
            })

            prepare the route for a HTML client
            app.get('/lab5get', function(req, res){
                res.sendFile(path.join(__dirname + '/public/html/ajaxGet.html'))
            })
            
// public/html/ajaxGet.html <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script>

                        $(document).ready(function(){
                            $("#btn").click(function(){
                                alert("test ajax get, test 8:38 pm");
                                $.ajax({
                                url: '/data5',             // refer to the route
                            }).done(function(data){
                                alert(data.name + " , " + data.color)
                                var dog = "My dog is " + data.name + ". He is a " + data.color + " dog.";
                                $("#myDog").append(dog);   // update the same html page        
                            }).fail(function(){
                                alert("Ajax fail to fetch data");
                            })
                        });
                    });
                
</script> </head> <body> <p id="myDog"></p> <button id="btn">asyn get</button> </body>

lab 52: asynchonously post data

// in ajaxPost.html A htm form is not used. <body> <h1>5.2 ajaxPost.html </h1> <p>test 7:32 am</p> dog name:<br /> <input type="text" id="dogname"><br /> dog color:<br /> <input type="text" id="dogcolor"><br /> <p id="myDog"></p> <button id="btn">ajax post</button> </body>
            // in ajaxPost.html - head tag          jquery is needed
            $(document).ready(function(){
                $("#btn").click(function(){
                    alert("test ajax post, test 11:22 am");

                    var name = document.getElementById('dogname').value
                    var color = document.getElementById('dogcolor').value
                    var myJson = {dogname: name, dogcolor: color}
                    var strJson = JSON.stringify(myJson)
                    alert("strJson = " + strJson)

                    $.ajax({
                        url: '/lab52post', 
                        type: 'POST', 
                        contentType: 'application/json', 
                        //data: JSON.stringify({dogname: 'Tairo',color: "brown"}),
                        data: strJson,
                        success: function(response){
                            alert('the post is OK ' + response)
                            $("#myDog").append(response)
                        },
                        error: function(xhr, ajaxOptions, thrownError) {
                            alert(xhr.status);
                            alert(thrownError);
                        }
                    });               
                });
            });

            // app52.js    
            ...
            var bodyParser = require('body-parser')
            app.use(bodyParser.json())
            ....
            app.get('/lab52post', function(req, res){
                res.sendFile(path.join(__dirname + '/public/html/ajaxPost.html'))
            })

            app.post('/lab52post', function(req, res){
                var p1 = req.body.dogname
                var p2 = req.body.dogcolor
                var p3 = 'Peter'     // It can be from db access with dog name
                var msg = p1 + ' is a ' + p2 + ' dog. The owner is ' + p3 
                console.log(msg)
                res.end(msg)
            })