NodeJS系列~第一个小例子,实现了request.querystring功能

返回目录html

百度百科上:

Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的。Node为建立http服务器做了优化,因此在网上看到的大部分示例和库都是集中在web上(http框架、模板库等)。node

Node.js的优势

nodejs做为一个新兴的后台语言,有不少吸引人的地方:
RESTful API
单线程
Node.js能够在不新增额外线程的状况下,依然能够对任务进行并行处理 —— Node.js是单线程的。它经过事件轮询(event loop)来实现并行操做,对此,咱们应该要充分利用这一点 —— 尽量的避免阻塞操做,取而代之,多使用非阻塞操做。
非阻塞IO
事件驱动

下面我愉前人写的一个资料,让你们更清楚的了解NodeJS,前人的文章

 Node 旨在解决什么问题?

Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?咱们来作个数学题。在 Java™ 和 PHP 这类语言中,每一个链接都会生成一个新线程,每一个新线程可能须要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发链接数量是 4,000 个用户。随着您的客户群的增加,若是但愿您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。固然,这会增长服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即 用户可能针对每一个请求使用不一样的服务器,所以,任何共享资源都必须在全部服务器之间共享。鉴于上述全部缘由,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器可以处理的并发链接的最大数量。程序员

Node 解决这个问题的方法是:更改链接到服务器的方式。每一个链接发射一个在 Node 引擎的进程中运行的事件,而不是为每一个链接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它毫不会死锁,由于它根本不容许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发链接。web

如今您有了一个能处理数万个并发链接的程序,那么您能经过 Node 实际构建什么呢?若是您有一个 Web 应用程序须要处理这么多链接,那将是一件很 “恐怖” 的事!那是一种 “若是您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题以前,咱们先看看 Node 的工做原理以及它的设计运行方式。编程

Node 确定不是什么?

没错,Node 是一个服务器程序。可是,基础 Node 产品确定 像 Apache 或 Tomcat。本质上,那些服务器 “安装就绪型” 服 务器产品,支持当即部署应用程序。经过这些产品,您能够在一分钟内启动并运行一个服务器。Node 确定不是这种产品。Apache 能经过添加一个 PHP 模块来容许开发人员建立动态 Web 页,添加一个 SSL 模块来实现安全链接,与此相似,Node 也有模块概念,容许向 Node 内核添加模块。实际上,可供选择的用于 Node 的模块有数百个之多,社区在建立、发布和更新模块方面很是活跃,一天甚至能够处理数十个模块。本文后面将讨论 Node 的整个模块部分。浏览器

Node 如何工做?

Node 自己运行 V8 JavaScript。等等,服务器上的 JavaScript?没错,您没有看错。对于只在客户机上使用 JavaScript 的程序员而言,服务器端 JavaScript 多是一个新概念,但这个概念自己并不是高不可攀,所以为什么不能在服务器上使用客户机上使用的编程语言?缓存

什么是 V8?V8 JavaScript 引擎是 Google 用于其 Chrome 浏览器的底层 JavaScript 引擎。不多有人考虑 JavaScript 在客户机上实际作了些什么?实际上,JavaScript 引擎负责解释并执行代码。Google 使用 V8 建立了一个用 C++ 编写的超快解释器,该解释器拥有另外一个独特特征;您能够下载该引擎并将其嵌入任何 应用程序。V8 JavaScript 引擎并不只限于在一个浏览器中运行。所以,Node 实际上会使用 Google 编写的 V8 JavaScript 引擎,并将其重建为可在服务器上使用。太完美了!既然已经有一个不错的解决方案可用,为什么还要建立一种新语言呢?安全

事件驱动编程

许多程序员接受的教育使他们认为,面向对象编程是完美的编程设计,这使得他们对其余编程方法不屑一顾。Node 使用了一个所谓的事件驱动编程模型。服务器

清单 1. 客户端上使用 jQuery 的事件驱动编程
// jQuery code on the client-side showing how Event-Driven programming works

// When a button is pressed, an Event occurs - deal with it
// directly right here in an anonymous function, where all the
// necessary variables are present and can be referenced directly
$("#myButton").click(function(){
     if ($("#myTextField").val() != $(this).val())
         alert("Field must match button text");
});

实际上,服务器端和客户端没有任何区别。没错,这没有按钮点击操做,也没有向文本字段键入的操做,但在一个更高的层面上,事件正在 发生。一个链接被创建,这是一个事件!数据经过链接进行接收,这也是一个事件!数据经过链接中止,这仍是一个事件!网络

为 什么这种设置类型对 Node 很理想?JavaScript 是一种很棒的事件驱动编程语言,由于它容许使用匿名函数和闭包,更重要的是,任何写过代码的人都熟悉它的语法。事件发生时调用的回调函数能够在捕获事件处 进行编写。这样可使代码容易编写和维护,没有复杂的面向对象框架,没有接口,没有过分设计的可能性。只需监听事件,编写一个回调函数,其余事情均可以交 给系统处理!

扩展的模块

Node.js使用Module模块去划分不一样的功能,以简化应用的开发。Modules模块有点象C语言中的类 库。每个Node.js的类库都包含了十分丰富的各种函数,好比http模块就包含了和http功能相关的不少函数,能够帮助开发者很容易地对好比 http,tcp/udp等进行操做,还能够很容易的建立http和tcp/udp的服务器。
要在程序中使用模块是十分方便的,只须要以下:
在这里,引入了http类库,而且对http类库的引用存放在http变量中了。这个时候,node.js会在咱们 应用中搜索是否存在node_modules的目录,而且搜索这个目录中是否存在http的模块。若是node.js找不到这个目录,则会到全局模块缓存 中去寻找,用户能够经过相对或者绝对路径,指定模块的位置,好比:
var myModule = require('./myModule.js');

模块中包含了不少功能代码片段,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。固然,能够将某些方法和变量暴露到模块外,这个时候可使用export对象去实现

首先须要安装nodejs环境,相关文件下载

下载以后,安装以后,在C盘就会出现nodejs的相关目录

OK,咱们来看一下如何实现request.querystring功能的,即get请求的功能,相关代码以下:

var qs = require('querystring');
var http = require('http');
var formidable = require('formidable');
var exec = require('child_process').exec;
var fs = require('fs');
var filename = '';

var url = require("url");

function start(response, request) {
    var getQuery = url.parse(request.url).query;
    var getData = qs.parse(getQuery); //getData数据 
    console.log(getData["zzl"]);
}

别外一种比较标准的写法重到querystring字符串,写法以下:

var http = require("http");
var url = require("url");
var params = url.parse(request.url, true).query;
console.log(params.zzl);

感受第二种写法更清晰

测试:

http://127.0.0.1:8888?zzl=1234

对于nodejs的console控制台的结果就为:

 返回目录

相关文章
相关标签/搜索