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 相关文章推荐
IE6中使用position导致页面变形的解决方案(js代码)
Jan 09 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
javascript对中文按照拼音排序代码
Aug 20 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
JavaScript操作DOM元素的childNodes和children区别
Apr 01 Javascript
详解iframe与frame的区别
Jan 13 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
详解Angular2响应式表单
Jun 14 Javascript
zTree树形插件异步加载方法详解
Jun 14 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
Apr 07 Javascript
Jquery异步上传文件代码实例
Nov 13 jQuery
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 获得汉字拼音首字母的函数
2009/08/01 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
python在协程中增加任务实例操作
2021/02/28 Python
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
.net面试题
2015/12/22 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
自我鉴定怎么写
2013/12/05 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
食品安全宣传标语
2014/06/07 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
客房部经理岗位职责
2015/02/02 职场文书
化验室岗位职责
2015/02/14 职场文书
宾馆安全管理制度
2015/08/06 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
Django与数据库交互的实现
2021/06/03 Python
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android