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 相关文章推荐
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
jQuery基于当前元素进行下一步的遍历
May 20 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
Mar 17 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
Oct 10 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 Javascript
解决layui表格内文本超出隐藏的问题
Sep 12 Javascript
vue分页插件的使用方法
Dec 25 Javascript
JS 图片压缩原理与实现方法详解
Apr 29 Javascript
JS实现购物车基本功能
Nov 08 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
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python list运算操作代码实例解析
2020/01/20 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python中温度单位转换的实例方法
2020/12/27 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
车间主任岗位职责
2015/02/03 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
python中if和elif的区别介绍
2021/11/07 Python