基於Express框架使用POST傳遞Form資料
阿新 • • 發佈:2019-01-01
客戶端使用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資料,
client.js<!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>
$(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