Node.js系列之发起get/post请求(2)

2020-06-17 05:46:58易采站长站整理

服务器与浏览器的交互主要方式有get/post请求。

下面,我们来看一下node.js发起get/post请求。

1、get

由于get请求的参数在url后面,所以相对比较简单。node.js中的url模块提供了parse函数来处理。具体代码如下:


//引入模块
var http=require('http');
var url=require('url');
var util=require('util');

//创建http Server 处理请求
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type': 'text/plain'});

//解析url参数
var params=url.parse(req.url,true).query;
res.write('用户名:'+params.name);
res.write('n');
res.write('密码'+params.password);
res.end();
}).listen(8888);

测试:

注意:上面代码中监听的是8888端口。

2、post

post请求的内容都包含在请求体中,因此处理起来没有get请求那么简单。所有node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。


//引入模块
var http=require('http');
var querystring=require('querystring');

var postHTML =
'<html><head><meta charset="utf-8"><title> Node.js 实例</title></head>' +
'<body>' +
'<form method="post">' +
'用户名: <input name="name"><br>' +
'密码: <input name="password"><br>' +
'<input type="submit">' +
'</form>' +
'</body></html>'
console.log('准备html');
//创建http Server 处理请求
http.createServer(function(req,res){
console.log('进入http Server');
//定义post变量,暂存请求体信息
var body='';

//通过req的data事件监听函数,当接收到请求体的数据,累加到post变量
req.on('data',function(chunk){
body+=chunk;
});
console.log('进入req end 1');
//在end事件触发后,将post解析为真正的post请求格式
req.on('end',function(){
body=querystring.parse(body);
res.writeHead(200,{'Content-Type': 'text/html; charset=utf8'});
console.log('进入req end 2');
if(body.name && body.password){
res.write(body.name);
res.write('<br>');
res.write(body.password);
}else{
res.write(postHTML);
}
res.end();
});
}).listen(8888);

测试:

在node终端启动成功后,浏览器输入地址http://localhost:8888,看到如下页面:

输入用户名和密码,完成回写到浏览器。