Node 简介
Node是JavaScript语言的服务器运行环境
所谓“运行环境”有两层意思:首先,JavaScript语言通过Node在服务器运行,在这个意义上,Node有点像JavaScript虚拟机;其次,Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件、新建子进程),在这个意义上,Node又是JavaScript的工具库
Node内部采用Google公司的V8引擎,作为JavaScript语言解释器;通过自行开发的libuv库,调用操作系统资源
Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务。这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行
NodeJS是什么?
使用JavaScript
进行后台的开发
服务器端的JavaScript
解析器
NodeJS究竟是什么?https://www.ibm.com/developerworks/cn/opensource/os-nodejs/
npm是什么?
NPM是Nodejs的包管理工具,全球最大的代码工厂。
在安装NodeJS到电脑上的时候,npm就会被一起安装在电脑上。
使用npm之前应先初始化一个package.json文件,来帮助我们更好的管理各种包。
1 | 初始化package.json文件,一步一步进行输入 |
安装生产环境所需的包 --save
1 | $ npm install --save moduleName |
安装开发环境所需的包 --save-dev
1 | $ npm install --save-dev mouduleName |
安装
官网 https://nodejs.org/en/下载安装包,傻瓜式安装。
查看是否安装成功
输入命令,查看版本号即可,来证明是否安装成功
1 | $ node -v |
1 | $ npm -v |
如果node版本号过低,可以通过node.js的n
模块完成。
1 | $ npm install -g n 安装n模块 |
如果npm版本号过低,则使用命令安装最新的npm包管理工具
1 | $ npm install -g npm@latest 使用npm来安装npm |
执行文件
1 | $ node server 执行编写好的server.js文件,后缀可以省略 |
安装cnpm
使用淘宝镜像,加快访问的速度
1 | $ npm install -g cnpm --registry=https://registry.npm.taobao.org |
使用
1 | $ cnpm install --save express |
CommonJS
Node应用由模块组成,采用CommonJS模块规范。
CommonJS简介
根据这个规范,每个文件就是一个模块,有自己的作用域。
在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
AMD规范则是非同步加载模块,允许指定回调函数。
由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。
但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
CommonJS特点:
- 所有代码都运行在模块作用域,不会污染全局作用域。
- 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
- 模块加载的顺序,按照其在代码中出现的顺序。
CommonJS定义模块
example.js
1 | var x = 5; |
example2.js
1 | module.exports = function () { |
CommonJS导入模块
server.js
1 | // 引入模块 |
核心模块
如果只是在服务器运行JavaScript代码,用处并不大,因为服务器脚本语言已经有很多种了
Node.js的用处在于,它本身还提供了一系列功能模块,与操作系统互动。这些核心的功能模块,不用安装就可以使用
- http:提供HTTP服务器功能
- url:解析URL
- fs:与文件系统交互
- querystring:解析URL的查询字符串
- child_process:新建子进程
- util:提供一系列实用小工具
- path:处理文件路径
- crypto:提供加密和解密功能,基本上是对OpenSSL的包装
http模块
http
模块主要用于搭建HTTP服务。使用Node搭建HTTP服务器非常简单。
1 | // 引入对应的模块 |
fs模块
fs
模块用于读取文件中的数据
读取普通数据文件
1 | / 引入对应的模块 |
读取html文件返回
1 | / 引入对应的模块 |
根据输入不同的网址,进行不同数据的返回
1 | // 引入对应的模块 |
上面代码只是单纯的返回文字,下面返回真是的网页
1 | // 根据输入不同的网址,进行不同的内容显示 |
url模块
如果现在在网址中添加参数,则会访问失败
需要添加url模块,来解析url地址
1 | var url = require('url'); |
querystring模块
用于解析出网址中的参数,将字符串转为对象
1 | var url = require('url'), |
express模块(三方模块)
Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站
初始化配置文件
1
$ npm install -y
安装模块
1
$ npm install --save express
建议大家进行全局安装,这样不用每个项目都安装这个模块
1
$ npm install -g express
创建index.js文件,引入模块,编写服务器代码
1
2
3var express = require('express');
// 创建app,后续使用此app
var app = express();添加路由代码
1
2
3
4
5
6
7
8
9
10
11app.get('/', function (req, res) {
req.send('home page');
});
app.get('/about', function (req, res) {
req.send('about page');
});
// 设置启动端口
app.listen(8888, function () {
console.log('Server running on port 8888');
});运行文件
1
node index.js
优化代码,将路由代码单独放置文件
router.js1
2
3
4
5
6
7
8
9
10
11module.exports = function (app) {
app.get('/', function (req, res) {
res.send('home page');
});
app.get('/about', function (req, res) {
res.send('about page');
});
app.get('/mine', function (req, res) {
res.send('mine page');
});
};修改index.js中的代码,引入路由代码
1
2
3var app = require('express')();
require('./router')(app);
app.listen(8888);