超文本传输协议(HTTP)的设计目的是保证客户端机器与服务器之间的通信。
在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET - 从指定的资源请求数据。(一般用于获取数据)
POST - 向指定的资源提交要被处理的数据。(一般用于提交数据)
获取GET传值:
var urlinfo=url.parse(req.url,true);
urlinfo.query();
获取POST传值:
var postData = '';
req.on('data', function (postDataChunk) {
postData += postDataChunk;
});
// 数据接收完毕,执行回调函数
req.on('end', function () {
console.log('postStr,',postStr); // username=usernameTxt&password=passwordTxt
});
接下来我们就以一个简单的登录页面为demo:
form.ejs:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h2>登录</h2>
<form action="/dologin" method="post">
<input type="text" name="username"/>
<br/>
<input type="password" name="password"/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
页面效果如下:
输入信息点击登录,将信息传递过去, 这里就涉及到get和post两种传递方法了,而我们可以通过req.method拿到是get还是post请求,具体看示例:
var http = require('http');
var fs = require('fs');
var path = require('path');
var ejs = require('ejs');
var url = require('url');
http.createServer(function(req,res){
var pathname = url.parse(req.url).pathname;
var method = req.method.toLowerCase();
if(pathname == '/login'){
ejs.renderFile('./views/form.ejs', {}, function(err, data){
res.end(data);
})
}else if(pathname == '/dologin' && method == 'get'){
// get请求
console.log(url.parse(req.url, true).query); // 拿到请求参数
res.end('/dologin get');
}else if(pathname == '/dologin' && method == 'post'){
// post请求
var postStr = "";
req.on('data', function(chunk){
postStr += chunk;
})
req.on('end', function(err,chunk){
console.log('postStr,',postStr); // username=usernameTxt&password=passwordTxt
})
res.end('/dologin post');
}else {
ejs.renderFile('./views/index.ejs', {}, function(err, data){
res.end(data);
})
}
}).listen(8000);