Node.js初学记录
一、背景介绍
话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。具体的背景大家可以自行再查询一下。总之就是,技术大牛在用不惯老技术的时候,突发奇想的要创造一个更便捷的新技术来迭代老技术。
简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。在Node上运行的JavaScript相比其他后端开发语言的最大优势是借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。
二、安装node.js
1、从官网上下载node.js的安装包,链接: https://nodejs.org/en/download/.
我们是windows的环境,所以我下载的是windows-64位的安装包。
2、安装node.js,具体的安装方式不进行概述了,就是下一步到底,我只是修改了安装的路径,我没默认安装在C盘,而是D盘下。
需要介绍一下的是nmp,npm是干什么的呢?npm其实是Node.js的包管理工具(package manager)。因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,我们就需要去官网找到指定的包,然后倒入到我们自己的项目中,这样是很麻烦的一件事。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。
更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。
所以npm已经在Node.js安装的时候顺带装好了。
我们安装好node.js以后,测试安装是否成功,运行CMD,分别输入node -v 和 npm -v 可以分别查看node和npm的版本号。
(附:如果是解压缩安装,记得配置环境变量,这里我们是没有配合的,我们可以看到,在我们上图中,最后一个 “add path”是将node.js自动配置了环境变量的)
三、使用node.js
在使用node.js时候,我们要注意,用Word和写字板来编辑代码的时候,一定要注意编码,我们尽量不要用Word和写字板来编辑。Word和写字板保存的不是纯文本文件。如果我们要用记事本来编写JavaScript代码,要务必注意,记事本以UTF-8格式保存文件时,会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果经常会导致程序运行出现莫名其妙的错误。所以,用记事本写代码时请注意,保存文件时使用ANSI编码,并且暂时不要输入中文。
如果你的电脑上已经安装了Sublime Text,或者Notepad++,也可以用来编写JavaScript代码,注意用UTF-8格式保存。
进入node 的dos界面,进行简单的测试,console.log(“Hello World”);这里我就不描述了。
背景介绍的时候我们已经说了,Node.js 就是运行在服务端的 JavaScript。所以我们是可以直接让node.js运行在服务器上,然后我们可以访问相应的地址访问到对应的程序。下面我们就行一个实例演示。
在我们创建 Node.js 第一个 “Hello, World!” 应用前,我们要知道 Node.js 应用是由哪几部分组成的:
- 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
- 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
- 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
现在看可能不理解上面的几个概念。我们先一步一步操作,分步分析。
1、引入 required 模块
我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http。
var http = require("http");
其实这个我们可以理解为我们引入了一个http.js的文件,node中的模块通常来讲都是一个.js文件。模块的名字就是文件名(去掉.js后缀),所以http.js文件就是名为http的模块。看node的源码可以看到。lib文件夹下确实存在http.js的文件:
2、创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
这个我们分析一下就是,http中有一个createServer的方法,这个方法是创建服务的功能,从源码里面我们可以找到该代码逻辑。源码我们这里不深究,我们只要知道所有的模块都是一个个的js文件,至于js里面的方法,有兴趣的可以自己去看一下node的源码。
上面,我们完成了一个可以工作的 HTTP 服务器。
现在,我们使用 node 命令执行以上的代码:
node server.js
Server running at http://127.0.0.1:8888/
进入我们创建的httpTest.js的目录,运行该文件。
访问对应的地址,我们可以看到我们设置的hello World的输出。
简单的node.js使用方式介绍完以后,后续再深入的了解一下node.js的用法。