1. 程式人生 > >基於Express框架使用POST傳遞Form資料

基於Express框架使用POST傳遞Form資料

客戶端使用Form傳送資料

在客戶端Html檔案中Form程式碼如下:

<!-- POST test  -->
<form action="/test" method="post"  id="foo"  >
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit">
</form>

在伺服器端處理'/test' POST請求的程式碼如下: 

var bodyParser = require('body-parser');

// ... 

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// ... 

// 
//  request from form of the html file
// 
app.post('/test', urlencodedParser, function(req, res) {  
    if (!req.body) return res.sendStatus(400);

    console.log('Username: ' + req.body.username);
    console.log('Password: ' + req.body.password);

    res.send('Welcome, ' + req.body.username); 
});

客戶端使用Node.js傳送資料

在客戶端使用Node.js傳送Form資料的程式碼

const http = require('http');

var data = {  
        username: 'foo',  
        password: "test"  
}; 
 
var postData = require('querystring').stringify(data);  
console.log( postData );  

function form()
{
    var options = {  
        method: "POST",  
        host: "localhost",  
        port: 80,  
        path: "/test",  
        headers: {  
            "Content-Type": 'application/x-www-form-urlencoded',  
            "Content-Length": postData.length  
        }  
    };  
  
    var body = ''; 
    var request = http.request( options, function(res) {  
        // show results  
        console.log('STATUS: ' + res.statusCode);    
        res.setEncoding('utf8');  
        res.on('data', function(chunk) {  
            body += chunk;
            console.log('BODY: ' + chunk);  
        });  
  
        res.on('end', function(err) {  
            console.log( ' complete.');  
        });  
    });  
        request.on("error", function(e) {  
            console.log('upload Error: ' + e.message);  
        })  
   
    request.write( postData );
    request.end();  
}

form();

客戶端使用jQuery傳送資料

客戶端使用jQuery的 $.ajax post資料,

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Post Data</title>
    <script src="jquery.min.js" type="text/javascript"></script>
    <script src="client.js" type="text/javascript"></script>
</head>
<body>

<!-- POST test  -->
<form action='/update' method='post' id='foo' > Parameters
<table border="0">
  <tr>
    <td> File Name</td>
    <td> <input type="text" name="filename" value = "foo.txt" /></td>
  </tr>
</table> 
</form>
<button name="button1" id='startButton' > Update</button>

</body>
</html>
 client.js 
$(document).ready(function(){ 

     //try joining the server when the user clicks the connect button
     $("#startButton").click(function () {
      var filename = $("#input[name=filename]").val();
 
	$.ajax({
	type: 'POST',
        url: "/update",
        // dataType: "jsonp",
        data:  { "filename": filename}  ,        
        jsonpCallback: 'callback',  
        success: function (data) {
            // ...
        },
        error: function (xhr, status, error) {
            console.log('Error: ' + error.message);
        },
      });
 
    });
});

server端使用node.js解析資料
//
// Modules 
var express = require('express'); 
var bodyParser = require('body-parser'); 

//
//  Global variables 
var app = express();  

// body parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));


/* POST /update listing. */
app.post('/update', function(req, res, next) {
    // Checking require
    if (!req.body) return res.sendStatus(400);	
	
    console.log('filename: ' + req.body.filename);  

    res.redirect('./');
});

參考文獻:
 https://github.com/expressjs/body-parser