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 相关文章推荐
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
原生js实现查找/添加/删除/指定元素的class
Apr 12 Javascript
7个JS基础知识总结
Mar 05 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
js的touch事件的实际引用
Oct 13 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
巧用canvas
Jan 21 Javascript
详解jQuery中ajax.load()方法
Jan 25 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
如何基于JS截获动态代码
Dec 25 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 If Else(elsefi) 语句
2013/04/07 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
js函数调用常用方法详解
2012/12/03 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python网络编程学习笔记(一)
2014/06/09 Python
python实现查询IP地址所在地
2015/03/29 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python 实现多维数组转向量
2019/11/30 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python中如何写类
2020/06/29 Python
车队司机自我鉴定
2014/03/02 职场文书
项目工作说明书
2014/07/29 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
python库sklearn常用操作
2021/08/23 Python
MySQL创建定时任务
2022/01/22 MySQL