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


Posted in Javascript onAugust 30, 2019

服务器与浏览器的交互主要方式有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端口。

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

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,看到如下页面:

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

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

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

3、扩展

到此,node.js处理get和post请求的小例子就做完了。现在,应该和过去的语言对比找关系,编织知识网了。

3.1模块

每种语言都提供了一定的“基础设施”或者叫“基础工具”,比如java/c++的类库。node也提供了很多模块、函数、常用工具等,引入的位置在Demo的最上方,看到模块的名字基本上就能猜到它的功能。
比如:

var http=require('http');
var url=require('url');
var util=require('util');

3.2Web服务器

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。

大致的架构逻辑是:Browser——>Web Server——>Application Server——>DB。

web服务器、客户端实例:

需要引入http模块,使用createServer方法创建。
注意:这里就不详细介绍了,只说明主要流程。

1)Server

//创建http服务器
http.createServer( function (request, response) { 
 // 解析请求,包括文件名
 var pathname = url.parse(request.url).pathname;

 // 从文件系统中读取请求的文件内容,
 fs.readFile(pathname.substr(1), function (err, data) {

   // 响应文件内容
   response.write(data.toString());  
  }
  // 发送响应数据
  response.end();
 }); 
}).listen(8081);

// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8081/');

2)Client

var http = require('http');

// 封装请求的对象
var options = {
 host: 'localhost',
 port: '8081',
 path: '/index.htm' 
};

// 处理响应的回调函数
var callback = function(response){
 // 不断更新数据
 var body = '';
 response.on('data', function(data) {
  body += data;
 });

 response.on('end', function() {
  // 数据接收完成
  console.log(body);
 });
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();

执行server.js,

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

然后执行client.js,然后就可以获得index.html的内容了。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
JQuery显示隐藏DIV的方法及代码实例
Apr 16 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
js微信支付实现代码
Dec 22 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
mac上配置Android环境变量的方法
Jul 08 Javascript
js中split()方法得到的数组长度问题
Jul 19 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
JS实现继承的几种常用方式示例
Jun 22 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 #Javascript
微信小程序实现写入读取缓存详解
Aug 30 #Javascript
VUE 自定义组件模板的方法详解
Aug 30 #Javascript
Jquery动态列功能完整实例
Aug 30 #jQuery
vue 兄弟组件的信息传递的方法实例详解
Aug 30 #Javascript
微信小程序sessionid不一致问题解决
Aug 30 #Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 #Javascript
You might like
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
chrome原生方法之数组
2011/11/30 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python zip()函数用法实例分析
2018/03/17 Python
python中对数据进行各种排序的方法
2019/07/02 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
应届毕业生求职信范文分享
2013/12/26 职场文书
法人授权委托书
2014/04/03 职场文书
股权转让协议书
2014/12/07 职场文书
技术支持岗位职责
2015/02/13 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
python requests模块的使用示例
2021/04/07 Python
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers