nodejs-http服务

使用nodejs搭建http服务很简单,代码如下:

var http = require("http");//获取http对象
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
  function(req,res){
    console.log("run ... ");
    res.writeHead(200,{'Content-Type':'text/html'});//响应代码为200(正常) 已html方式展示
    res.write("<h1>Hello World</h3>"); //输出html代码
    res.end('<p>hello World</p>');//输出html代码,必须要调用res.end()方法,否则浏览器一直等待直到该方法调用
  }
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");

打开浏览器输入http://127.0.0.1:3000/后回车即可看到界面


接下来对上面的代码进行改造:

var http = require("http");//获取http对象
var fs = require("fs"); //获取fs对象
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
  function(req,res){
    console.log("run ... ");
    res.writeHead(200,{'Content-Type':'text/html'});//响应代码为200(正常) 已html方式展示
  
	//异步读取数据
	fs.readFile("app02.html","utf-8",function(err,data){
		if(err){//如果出现错误则直接显示错误原因
			res.end(err);
		}else{//如果成功读取文件则返回文件内容
			res.end(data.toString());
		}
	});


  }
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");

打开浏览器输入 http://127.0.0.1:3000/ 后回车即可看到界面



 

 

 接下来引入新的模块,对请求的url进行解析

var http = require("http");//获取http对象
var url = require("url");//获取url对象
var querystring = require("querystring");//获取querystring对象
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
	function(req,res){
	  	res.writeHead(200,{"Content-Type":"text/html"});
	  	//获取请求地址
	  	var requresturl = req.url;
	    res.write("request url:" + requresturl + "<br/>");
	    //请求的路径
	    var pathname = url.parse(req.url).pathname;
	    res.write("pathname:" + pathname + "<br/>");
	    //请求的参数
	    var querystr = url.parse(req.url).query;
	    res.write("query str : " + querystr + "<br/>");

	    //请求的地址进行所有属性的解析
	    var obj = url.parse(req.url);
	    res.write(JSON.stringify(obj)+"<br/>");
	    res.write("<hr/>");

	    //请求的参数转为JSON格式
	    var params = querystring.parse(querystr);
	    res.write(JSON.stringify(params)+"<br/>");
	    res.write("<hr/>");
	    
	    res.end("please input a url like  : http://127.0.0.1:3000/aa/b/c/a.do?a=1&b=4");
	}
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");

运行以上代码后打开浏览器输入 http://127.0.0.1:3000/aa/b/c/a.do?a=1&b=4 可以看到结果

-


上例中对请求的地址进行了解析,对于网站的所有请求,正常的思维应该是什么样的请求应如何处理,例如/booklist请求应展示一个列表  /bookinfo?id=1为展示id为1的图书的详细信息,有了上面对url模块的引用就可以根据请求地址进行处理了。


下载文件的事例:

var http = require("http");//获取http对象
var fs = require("fs");
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
	function(req,res){
		//设置相应代码为200  content-type为图片 对于各种文件的content-type请baidu..
	  	res.writeHead(200,{"Content-Type":"image/jpeg"});
	  	//异步读取文件流
	  	var stream = fs.createReadStream("ly.jpg");
	  	//读取文件的时候触发
	  	stream.on("data",function(data){
	  		res.write(data);
	  	});
	  	//数据读取完成触发
	  	stream.on("end",function(){
	  		res.end();
	  	});
	  	
	}
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");
上面例子仅仅是让大家了解content-type属性



以上内容都是get请求,下面处理post请求,代码如下:

var http = require("http");//获取http对象
var querystring = require("querystring");
var util = require("util");
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
	function(req,res){
	  	console.log(" deal request : " + req.url);
	  	var post= "";
	  	//当接受到数据的时候触发
	  	req.on('data',function(chunk){
	    	console.log('accept date :' + chunk);
	    	post += chunk;
	    });

	  	//数据接受完时触发
	    req.on('end',function(){
	    	console.log('request date end');
	    	post = querystring.parse(post);
	    	res.writeHead(200,{'Content-Type':'text/html'});
	    	//res.end(util.inspect(post));
	    	console.log("data:" + JSON.stringify(post));
	    	res.end(JSON.stringify(post));
	    });

	}
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");
以上是服务,运行服务后用浏览器打开html,代码如下:

<html>
<head>
<meta charset="utf-8"/>
<script>
function submitPost(){
	var url = document.getElementById("submitUrl");
	document.getElementByid("theForm").action=url;


}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.113:3000" id="theForm">
提交地址:例如http://192.168.1.113:3000<br/>
<input type="text" style="width:300px;" id="submitUrl" name="submitUrl" value="http://192.168.1.113:3000"/>
<hr/>
name:<input name="name" type="text" value="name_value"/>
<br/>
age:<input name="age" type="text" value="age_value"/>
<input type="submit" value="submit" οnclick="submitPost()"/>
</form>
</body>
</html>
点击提交后查看后台就可看到输出内容




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值