HTTP客户端与服务端

HTTP客户端与服务端

原谅我标题党了..也不算一个chat,只是展示了一下http的请求和http接收
关于了不起的nodejs实例都可以在我的github上找到

服务端

这里利用到http上一课也就是http表单中的知识.
建立一个服务器,然后监听3100端口.同时处理下data事件和end事件
这里没啥难度.咋们看客户端的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var http=require("http");
var qs=require("querystring");

http.createServer(function(req,res){
var body="";
req.on("data",function(data){
body+=data
})
req.on("end",function(){
res.writeHead(200);
res.end("okay")
console.log("接受到的name参数为:"+qs.parse(body).name)
})

}).listen(3100,function(){console.log("run 3100 port")})

客户端

首先我们了解下http.request
向某个网页发起一次http请求 可以是get也可以是post只需要以一个对象的方式写入进去就okay了
下例就是向127.0.1.1发起一次POST请求.同时附带一个查询字符串
http.request({},function(res)).end()
其中function(res)这个函数是请求成功后的一个回调函数 其中res就是服务器发送至你的返回体
既然是返回体那么肯定也有一些事件 比如data事件
process.stdout.write
这串代码是用来向客户端屏幕输出字符的
end()
end就是结束请求的意思 也就是说我们可以在结束请求的时候添加一些查询字符串 比如{name:”soul”}经过qs的转码后会变成name=soul
下例代码完整的请求应该是
POST 127.0.0.1:3100/?name=query

1
2
3
4
5
6
7
8
9
10
11
12
13
http.request({
"host":"127.0.0.1",
"port":3100,
"method":"POST",
"url":"/"
},function(res){
res.setEncoding("utf-8");
res.on("data",function(data){
console.log(data)
console.log("请求成功")
process.stdout.write("\r\n 请再输入你的名字:")
})
}).end(qs.stringify({name:query}))

然后我们把他封装成一个函数方便后面调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function send(query){
http.request({
"host":"127.0.0.1",
"port":3100,
"method":"POST",
"url":"/"
},function(res){
res.setEncoding("utf-8");
res.on("data",function(data){
console.log(data)
console.log("请求成功")
process.stdout.write("\r\n 请再输入你的名字:")
})
}).end(qs.stringify({name:query}))
}

process.stdout.write("第一次输入你的名字:");
//流默认是暂停的 需要resume()来恢复
process.stdin.resume();
process.stdin.setEncoding("utf-8");
process.stdin.on("data",function(name){
send(name.replace("\n",""))
})

process.stdin
客户端输入.默认是暂停的 所以我们得恢复输入流这样才能监听到输入的data事件
process.stdin.resume()//恢复输入流
process.stdin.setEncoding("utf-8");//设置一下编码 否则是buffer类型