了解 node.js

1 node 介绍

Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

外文名 Node.js 类 别 JavaScript工具 发布时间 2009年5月 开发者 Ryan Dah

发展史

· 2009年2月,Ryan Dahl在博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库。

· 2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。

· 2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。

· 2010年年底,Node.js获得云计算服务商Joyent资助,创始人Ryan Dahl加入Joyent全职负责Node.js的发展。

· 2011年7月,Node.js在微软的支持下发布Windows版本

特性

V8引擎本身使用了一些最新的编译技术。这使得用Javascript这类脚本语言编写出来的代码运行速度获得了极大提升,又节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。 Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。 虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其他一些支持Javascript在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。 在Node启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的非常有用的软件。 最后,不得不提到的是Node社区。虽然Node项目还非常年轻,但很少看到对一个项目如此狂热的社区。不管是新手,还是专家,大家都围绕着项目,使用并贡献自己的能力,致力于打造一个探索、支持、分享、听取建议的乐土。 Node.js的优点 nodejs作为一个新兴的后台语言,有很多吸引人的地方: RESTful API 单线程 Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处理 —— Node.js是单线程的。它通过事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。 非阻塞IO V8虚拟机 事件驱动

模块

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'); 模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。当然,可以将某些方法和变量暴露到模块外,这个时候可以使用exports对象去实现。

2 Node.js 应用是由哪几部分组成的:

  1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。

  2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

  3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

创建第一个应用https://www.w3cschool.cn/nodejs/nodejs-http-server.html

Node.js NPM 使用介绍

https://www.w3cschool.cn/nodejs/nodejs-npm.html

安装

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">npm install express # 本地安装</pre>

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">npm install express -g # 全局安装</pre>

卸载

npm uninstall express

查看安装信息

你可以使用以下命令来查看所有全局安装的模块:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">$ npm list -g</pre>

如果要查看某个模块的版本号,可以使用命令如下:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">$ npm list grunt</pre>

更新模块

我们可以使用以下命令更新模块:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">$ npm update express</pre>

搜索模块

使用以下来搜索模块:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">$ npm search express</pre>

Node.js REPL(交互式解释器)

https://www.w3cschool.cn/nodejs/nodejs-repl.html

注释:你可以使用下划线(_)获取表达式的运算结果:(指的是当前表达式的结果,或者说是最近表达式的结果);

[图片上传失败...(image-5d185b-1518168111938)]

[图片上传失败...(image-e8d17c-1518168111938)]

REPL 命令

· ctrl + c- 退出当前终端。

· ctrl + c****按下两次- 退出 Node REPL。

· ctrl + d- 退出 Node REPL.

· 向上****/****向下****键- 查看输入的历史命令

· tab - 列出当前命令

· .help- 列出使用命令

· .break- 退出多行表达式

· .clear- 退出多行表达式

· .save *****filename*- 保存当前的 Node REPL 会话到指定文件

· .load *****filename*- 载入当前 Node REPL 会话的文件内容。

Node.js 回调函数

https://www.w3cschool.cn/nodejs/nodejs-callback.html

Node.js Buffer(缓冲区)

https://www.w3cschool.cn/nodejs/nodejs-buffer.html

Node.js 事件

https://www.w3cschool.cn/nodejs/nodejs-event.html

Node.js 事件循环

https://www.w3cschool.cn/nodejs/nodejs-event-loop.html

Node.js 路由

[https://www.w3cschool.cn/nodejs/nodejs-router.html](https://www.w3cschool.cn/nodejs/nodejs-router.html/)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容