nodejs HTTP简易服务器和请求

nodejs 一个出场自带低音炮的网络应用语言

有人说:一切能用js实现的, 终将由js实现; 我对这句话深信不疑 :)

搭建一个简单的WEB服务器,接收GET和POST数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var http = require("http");//提供web服务
var url = require("url");//解析GET请求
var query = require("querystring");//解析POST请求
//服务
var server = function(request,response){
//定义报文头
response.writeHead(200, {"Content-Type":"text/json"});
//判断是GET/POST请求
if(request.method == "GET"){
var params = [];
params = url.parse(request.url,true).query;
response.write(JSON.stringify(params));
response.end();
}else{
var postdata = "";
request.addListener("data",function(postchunk){
postdata += postchunk;
})
//POST结束输出结果
request.addListener("end",function(){
var params = query.parse(postdata);
response.write(JSON.stringify(params));
response.end();
})
}
}
//开启服务在127.0.0.1:8080
http.createServer(server).listen(8080);
console.log("Server start!");

GET请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var http = require('http');
var qs = require('querystring');
var data = {a:123, time: new Date().getTime()};//这是需要提交的数据
var content = qs.stringify(data);
var options = {
hostname: 'localhost',
port: 80,
path: '/tmp.php?' + content,
method: 'GET'
};
var req = http.request(options, function (res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
req.end();

POST请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var http = require('http');
var qs = require('querystring');
var post_data = {a: 456, time: new Date().getTime()};
var content = qs.stringify(post_data);
var options = {
hostname: 'localhost',
port: 80,
path: '/tmp.php',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
};
var req = http.request(options, function (res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write(content);
req.end();

值得注意的是由于POST质量过大,所以不能像GET请求那样直接拿去数据。需要增加监听事件,并且在POST结束前都不能结束应答(response)完成报文流,所以要把输出、结束放到监听结束事件里。

参考链接: