GET
对于GET请求,由于所指定想要获取的资源的URL是完整的,因此可以在创建了服务器之后,在回调函数的request参数里,用url和querystring模块提取出客户端的请求参数,即Url中pathname和?之后的内容,然后根据这些信息去做响应的操作和响应。
eg:
var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(request, response){
response.writeHead(200, {'Content-Type': 'text/plain'});
var params = url.parse(request.url, true).query;
//if params 中的name或者url为。。。时,可以做不同对应的操作
response.write(params.name);
response.write(params.url);
respones.end(); //结束
}).listen(8888);
POST
对于POST请求,url在首次提交到时往往是不完整的,不完整部分需要后续来提交和指定,一旦所指定和提交的内容完整时,才会做出响应。从上面分析来看,POST请求至少有2个状态,一个是接受到的是POST请求时,开启监听,但是不做响应的状态,一个是所要提交的内容完整时,根据内容进行响应的状态。
eg:
var http = require('http');
var querystring = require('querystring');
http.createServer(function (req, res){
var body = "";
//接受到请求时的状态
req.on('data', function(chunk){
body += chunk;
});
//提交完整请求时的状态
req.on('end',function(){
//根据完整的内容进行解析和响应
body = querystring.parse(body);
res.writeHead(200,{'Content-Type': 'text/html;charset = utf8'});
//if ... res.write(..);
res.end();
}0;
}).listen(8888);
Node.js Web模块
创建一个服务器:
var http = require('http');
var fs = require('fs');
var url = require('url');
http.createServer( function (request, response) {
// 解析请求,包括文件名
var pathname = url.parse(request.url).pathname;
// 从文件系统中读取请求的文件内容
fs.readFile(pathname.substr(1), function (err, data) {
if (err) {
console.log(err);
response.writeHead(404, {'Content-Type': 'text/html'});
}else{
response.writeHead(200, {'Content-Type': 'text/html'});
response.write(data.toString());
}
// 发送响应数据
response.end();
});
}).listen(8888);