get请求post请求
nodejs在路由这块做得还是不错的,经常接触到的有get请求和post请求,我们知道nodejs是很难提供静态服务的,如果用原生的nodejs的会比较麻烦,以下提供代码,介绍原生nodejs是怎样处理get和post请求的
post请求:
node为了追求极致,它是一个小段一个小段接收的。接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程,下面是post请求接收的一个公式:
var alldata = "";
req.addListener("data",function(chunk){
alldata += chunk;
});
//全部传输完毕
req.addListener("end",function(){
console.log(alldata.toString());
res.end("success");
});
从上面公式可以看出,nodejs接收表单是分为两部分要有addListener,一个是不断接收数据块,一个是表示全部接收完毕,所以原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写,文件上传要用到第三方模块,formidable。注意:只要涉及文件上传,那么form标签要加一个属性:,否则上传为空
<form action="http://127.0.0.1/dopost" method="post" enctype="multipart/form-data">
接下来这段代码就是使用formidable模块接收表单上传图片
var http = require("http");
var formidable = require('formidable');
var util = require("util");//一个工具类
//创建服务器
var server = http.createServer(function(req,res){
//如果你的访问地址是这个,并且请求类型是post
if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
//Creates a new incoming form.
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./uploads";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
if(err){
throw err;
}
console.log(fields);
console.log(files);
console.log(util.inspect({fields: fields, files: files}));
//所有的文本域、单选框,都在fields存放;
//所有的文件域,files
res.writeHead(200, {'content-type': 'text/plain'});
res.end("成功");
});
}
});
server.listen(80,"127.0.0.1");
get请求
get请求是比较简单的,
var server = http.createServer(function(req,res){
if(req.url === '/admin'){
res.write('admin页面');
res.end();//一定要写res.end()否则浏览器就会认为这个请求 //直都没有结束
}
}
之前说过如果url有一些参数要取出来,可以引用url,或者path模块,里面有接口可以帮助取到url里面的查询参数