一般的,如asp,php等这些语言,对请求的数据可以很方便的获得 asp: Request.QueryString(“name”) Request.Form(“name”) Request.Cookie(“name”) php: $_GET[‘name’]; $_POST[‘name’]; $_COOKIE[‘name’]; ,但Node.js里没有这么方便,这些东西得自己做,除非使用框架.
response的set-cookie的COOKIE的格式为每行一个: aaa=aaa bbb=bbb; expires=Fri, 19-Jul-2013 07:28:03 GMT; path=/ ccc=ccc; expires=Fri, 19-Jul-2013 07:28:03 GMT; path=/; domain=bbb.com ddd=ddd; expires=Fri, 19-Jul-2013 07:28:03 GMT; path=/; domain=ddd.com; secure eee=eee; expires=Fri, 19-Jul-2013 07:28:03 GMT; path=/; domain=eee.com; secure; httponly
上来就用框架我感觉不好,所以一边搜索,一边把代码写出来了,只是cookie部分有点多,不过我都加注释了
将下边的代码保存为gpc.js 然后进入到命令行: D:\node\test>node gpc.js
然后用浏览器输入:http://127.0.0.1:8888 就能看到结果了
如果想测试post,请自建一个页面放一个表单,代码如下:
<form method="post" action="http://127.0.0.1:8888/?foo=bar"> <input type="text" name="text"> <input type="submit"> </form>下边是gpc.js的全部内容:
var port = '8888’; // 服务运行的端口号 var http = require(‘http’); // 引入HTTP服务模块 var url = require(‘url’); // 引入URL模块 var querystring = require(‘querystring’); // 引入querystring格式的字符串解析模块,用于解析post的数据
http.createServer(function(request, response){
// 如何获取URL中的查询参数 var oUrl = url.parse(request.url, true); // 解析当前URL //oUrl.query.foo 这样就可以得到 foo 的值了
// 如何获取cookie(将在下边的end事件中使用)
var cookies = {}; // 保存请求中所有的cookie数据,之后直接可以cookies.name获取cookie的值
var cookieString = request.headers.cookie; // 因为这里直接把cookie的字符串返回了,所以要方便用的话得处理一下
// 下边解析一下cookie字符串,保存到cookies对象中
var pairs = cookieString.split(/[;,] */);
for (var i =0; i < pairs.length; i++){
var idx = pairs[i].indexOf('=');
var key = pairs[i].substr(0, idx);
var val = pairs[i].substr(++idx, pairs[i].length).trim();
cookies[key] = val;
}
// 如何设置cookie(将在下边的end事件中使用)
var cookiesArr = []; // 保存添加的cookie数据,响应的时候一起传给客户端
// 这个函数用于设置cookie,跟其它语言的用法相同
// expires 超时时间,单位为秒
request.setCookie = function(name, value, expires, path, domain){
var cookieSrt = '';
cookieStr = name + '=' + value + ';';
//cookie有效期时间
if (expires != undefined) {
expires = parseInt(expires);
var today = new Date();
var time = today.getTime() + expires * 1000;
var newDate = new Date(time);
var expiresDate = newDate.toGMTString(); //转换成 GMT 格式。
cookieStr += 'expires=' + expiresDate + ';';
}
//路径
if (path != undefined) {
cookieStr += 'path=' + path + ';';
}
//域名
if (domain != undefined) {
cookieStr += 'domain=' + domain + ';';
}
cookiesArr.push(cookieStr);
return true;
};
// 如何获取客户端IP
var clientIp = request.connection.remoteAddress;
// 如何获取post数据
var postData = ''; // 用于存放post过来的数据
request.on('data', function(chunk){ // POST过来的数据可能会一部分一部分的到达,每次数据到达会触发一次data事件
postData += chunk; // 把POST过来的数据收集起来
});
// 这个事件是等POST请求完毕后,调用一个函数开始处理
request.on('end', function(){
var get = oUrl.query; // 这里得到一个对象,参数名就是键名
var post = querystring.parse(postData); // 解析数据,生成对象
// 如何设置cookie,这里设置的要到第二次刷新才能显示出来
// 注意cookie要在页面内容输出之前设置
request.setCookie('aaa', 'aaa111');
request.setCookie('bbb', 'bbb222', 999);
// 输出cookie
response.setHeader("Set-Cookie", cookiesArr); // 不写这行,cookie会获得一个s_fid=SESSION_ID
response.writeHeader(200, {'content-type':'text/html;charset=utf-8'});
response.write('URL查询:'+oUrl.search+'<br>'); // 查询字符串
response.write('URL查询参数foo的值:'+get.foo+'<br>'); // 取foo传过来的值
response.write('POST数据:'+postData+'<br>'); // 完整的post数据
response.write('POST数据text的值:'+post.text+'<br>'); // 取name=text的文本域的值
response.write('COOKIE数据:'+cookieString+'<br>'); // cookie字符串
response.write('COOKIE数据aaa的值:'+cookies.aaa+'<br>'); // 取cookie的aaa的值
response.write('客户端IP:'+clientIp+'<br>'); // 客户端IP
response.end();
});
}).listen(port); console.log('Server Start http://127.0.0.1:’+port);