Node.js的简介
Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
Node.js的特性
非阻塞I/O特性:
- 阻塞:I/O时进程休眠等待, 等待I/O完成后再进行下一步(就是排队的时候,一个一个来按顺序处理)
- 非阻塞:I/O时进程立即返回,进程不等待I/O完成, 继续往下执行 (就是大家先来领个号,立刻返回,等处理好后把结果通知给你)
RESTful API
RESTful API是一套协议来规范多种形式的前端和同一个后台的交互方式。RESTful API由后台也就SERVER来提供给前端来调用。前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。
单线程
Node可以在不新增额外线程的情况下,依然可以对任务进行并发处理。
事件驱动
Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为web server一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
Node.js 安装配置
本章节我们将向大家介绍在 Windows 和 Linux 上安装 Node.js 的方法。
Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/。
Node.js 历史版本下载地址:https://nodejs.org/dist/
安装
选择要安装的版本进行安装
安装完成 查看node版本 命令 node --version
步骤一:引入 required 模块
引入 required 模块
我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http
var http = require("http");
在 Node.js 中我们需要引入各种模块并实例化来运用,通常都是通过 require 指令来引入
步骤二、创建服务器
创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 test.js 的文件,并写入以下代码:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
接收请求与响应请求
以上代码我们完成了一个可以工作的 HTTP 服务器。进入test.js所在目录,使用 node 命令执行以上的代码
接下来,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 “Hello World”的网页。
REPL 命令
- ctrl + c - 退出当前终端,按下两次 ctrl + c 键就能退出 REPL。
- ctrl + c 按下两次 - 退出 Node REPL。
- ctrl + d - 退出 Node REPL.
- 向上/向下 键 - 查看输入的历史命令
- tab 键 - 列出当前命令
- .help - 列出使用命令
- .break - 退出多行表达式
- .clear - 退出多行表达式
- .save filename - 保存当前的 Node REPL 会话到指定文件
- .load filename - 载入当前 Node REPL 会话的文件内容。
什么是 Node.js 模块系统?
Node.js 模块可以分为两大类,一类是核心模块,另一类是文件模块。
核心模块
直接通过require获取核心模块,例如:
var fs = require('fs')
核心模块拥有最高的加载优先级,如果有模块与核心模块命名冲突,Node.js 总是会加载核心模块。
exports 和 require
exports 和 require
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象,接下来我们用个实例来解释
1.创建个hello.js文件代码如下
exports.world = function() {
console.log('Hello World');
}
2.创建文件test.js引入模块 hello.js
var hello = require('./hello');
hello.world();
require(‘./hello’) 引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)
3.执行test.js文件输出 ‘Hello World’;
在 test.js 中通过 require(‘./hello’) 加载这个模块,然后就可以直接访 问 hello.js 中 exports 对象的成员函数了。
有时候只是想把一个对象封装到模块中第一步在hello.js封装对象
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;