http模块主要用于搭建HTTP服务端和客户端,使用HTTP服务器或客户端功能都必须调用http模块。
创建服务器
var http = require(“http”);var url = require(“url”);//创建服务器//http继承自tcpvar server = http.createServer(function (req,res) { var urlstr = req.url;//获取请求的路径 var urlMethod = req.method;//获取请求的方法 var urlObj = url.parse(urlstr,true); console.log(urlObj); console.log(urlMethod); res.end(“hello”);});server.listen(8080);
对请求进行处理
请求分为两种:get和post,get请求url地址带参数,req.url便能获取参数,而post请求便复杂一些。使用req.on()处理post请求。
post请求方式:使用req.on(\”data\”function(){})方式读取,使用str字符串拼接,在req.on(\”end\”,function(){})读取结束后输出str便是我们想得到的post请求发送的参数;
get请求方式:在请求地址上使用url.parse(req.url,true).query得到参数。
var http = require(\"http\"); var fs = require(\"fs\"); var url = require(\"url\"); var querystring = require(\"querystring\"); var server = http.createServer(function (req,res) { console.log(req.method); var pathname = url.parse(req.url,true).pathname; if(pathname==\"/\"){ // 加载注册页面 var rs = fs.createReadStream(\"post.html\"); rs.pipe(res); }else if(pathname==\"/post\"){ // 处理post请求 var str = \"\"; req.on(\"data\",function (chunk) { // console.log(chunk.toString()); str += chunk; }); req.on(\"end\",function(){ var postObj = querystring.parse(str); console.log(postObj); }) }else if(pathname==\"/get\"){ // get请求 var getObj = url.parse(req.url,true).query; res.write(JSON.stringify(getObj)); res.end(); }else if(pathname!=\"/favicon.ico\"){ var rs = fs.createReadStream(\".\"+pathname); rs.pipe(res); }; }); server.listen(8787);
上传文件处理
前端html代码如下:就不细说了。
<form action=“/upimg” method=“post” enctype=“multipart/form-data”> 用户名: <input type=“text” name=“user”><br> 密码: <input type=“password” name=“pass”><br> 上传图片: <input type=“file” name=“file1”><br> <input type=“submit” value=“提交”></form>
想要实现文件上传,要引入formidable模块var formidable = require(\”formidable\”);若是没有此模块,在终端输入 npm install formidable安装。
form.parse(req,function(err,fields,fies){})方法回调函数的三个参数
-
err:返回错误信息
fields:post请求返回的字段以及对应的值
fies:上传的文件对象,对象中包含文件的很多详细信息
得到文件信息后,使用数据流的读和写复制文件
var http = require(\"http\"); var fs = require(\"fs\"); var url = require(\"url\"); // 文件上传 var formidable = require(\"formidable\"); var server = http.createServer(function(req,res){ var pathname = url.parse(req.url,true).pathname; if(pathname==\"/\"){ var rs = fs.createReadStream(\"uploads.html\"); rs.pipe(res); }else if(pathname==\"/uploads\"){ // 实例化一个formidable类 var form = new formidable.IncomingForm(); // 调用parse方法 form.parse(req,function(err,fields,files){ if(err){ return console.log(err); }else{ // console.log(\"字段\",fields); // 存储字段 var fieldStr = JSON.stringify(fields); fs.writeFileSync(\"1.txt\",fieldStr); // 转存文件 if(!fs.existsSync(\"uploads\")){ fs.mkdir(\"uploads\"); } // 随机路径 var filePath = files.img.path; var rs = fs.createReadStream(filePath); var ws = fs.createWriteStream(\"./uploads/\"+files.img.name); rs.pipe(ws); rs.on(\"data\",function (chunk) { }) rs.on(\"end\",function(){ console.log(\"复制成功\"); res.write(\"上传成功\"); res.end(); }) res.setHeader(\"Content-type\",\"text/html;charset=utf8\"); console.log(\"文件\",files); } }) }else if(pathname!=\"/favicon.ico\"){ var rs = fs.createReadStream(\".\"+pathname); rs.pipe(res); } }); server.listen(8880);
http模拟客户端
主要是options的配置,最基本的参数如下面的代码块。
-
method:说明请求方式;
host: 服务器ip,这里以本地localhost为例;
port:服务器端口号;
path:请求路径;
此时不在使用http.createServer()创建服务器了,而是使用http.request()请求服务器,其余的都和服务器差不多了。
// 通过nodejs模拟客户端 var http = require(\"http\"); var options = { method:\"post\", host:\"localhost\", port:2121, path:\"/\" }; var request = http.request(options,function (res) { var str = \"\"; res.on(\"data\",function(chunk){ str += chunk; }); res.on(\"end\",function () { console.log(str); }) }); var obj = { name:\"李四\", age:20 } request.write(JSON.stringify(obj)); request.end();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
© 版权声明
THE END
暂无评论内容