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获取当前ip的代码
May 10 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
jquery实现excel导出的方法
Apr 04 Javascript
javascript格式化日期时间方法汇总
Jun 19 Javascript
JS获取下拉框显示值和判断单选按钮的方法
Jul 09 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 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下过滤HTML代码的函数
2007/12/10 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP写日志的实现方法
2014/11/05 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
详解KMP算法以及python如何实现
2020/09/18 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
年会活动策划方案
2014/01/23 职场文书
爽歪歪广告词
2014/03/20 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
公司转让协议书
2016/03/19 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android