服务器与浏览器的交互主要方式有get请求和post请求。get是从服务器上获取数据,post是向服务器传送数据。
获取GET请求内容
GET 通常用于获取服务端数据,GET 请求直接被嵌入在路径中,URL 是完整的请求路径,包括后面的部分,因此可以手动解析后面的内容作为 GET 请求的参数。
示例:
我们可以使用 URL 模块中的 parse() 方法来解析 GET 请求参数,首先要通过 require 引入模块:
var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){ // 回调函数
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end(util.inspect(url.parse(req.url, true)));
}).listen(8888);
启动文件,访问http://127.0.0.1:8888/index?name=xkd&url=9xkd.com,浏览器显示结果为:
注意在代码中监听的是8888端口,所以我们访问时也是访问8888端口。
我们通过
http.createServer()
函数创建了一个HTTP服务器,req参数为请求对象,res参数为响应对象。然后用到了 url.parse(req.url,true)
函数返回一个 url 对象。
获取URL参数
var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain; ;charset=utf-8'});
// 解析 url 参数
var params = url.parse(req.url, true).query;
res.write("网站名:" + params.name + '\n');
res.write("网址:" + params.url);
res.end();
}).listen(8888);
启动文件,访问http://127.0.0.1:8888/index?name=xkd&url=9xkd.com,浏览器显示结果如下所示:
网站名:xkd
网址:9xkd.com
获取POST请求内容
POST 用于向服务器传送数据,如提交表单。POST 请求的内容全部都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。 比如上传文件,很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 Node.js 默认是不会解析请求体的,当有需要时,可以手动解析。
示例:
例如下面这个例子,实现了一个表单提交,并显示提交内容:
var http = require('http');
var util = require('util');
var querystring = require('querystring');
var dataHTML=
'<html><head><meta charset="utf-8"><title>表单提交</title></head>' +
'<body>' +
'<form method="post">' +
'姓名: <input name="name"><br>' +
'密码: <input name="pass"><br>'+
'<input type="submit">' +
'</form>'
'</body></html>';
http.createServer(function(req, res){
// 存放请求头信息
var save = '';
req.on('data', function(chunk){
save += chunk; // 一定要使用+=
});
// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回
req.on('end', function(){
// 解析参数
save = querystring.parse(save); // 将一个字符串反序列化为一个对象
// 设置响应头部信息及编码,text/html形式
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
if(save.name && save.pass){
res.write("姓名:" + save.name);
res.write("<br>");
res.write("密码:" + save.pass);
}else{
res.write(dataHTML);
}
res.end();
});
}).listen(8888);
启动文件,然后在浏览器中访问http://127.0.0.1:8888/,会显示一个表单,我们在输入框中输入姓名和密码,点击提交按钮,可以看到浏览器显示如下所示内容:
我们在上面的代码中,先是引入了需要用到的模块,dataHTML
中放的是html内容。然后使用http.createServer()
函数创建了一个HTTP服务器,在里面实现表单提交和信息显示。req.on()
用于触发事件。