一、Node.js简介
Node.js 是一个基于 Chrome V8 引擎的运行环境。 Node.js 使用了一个
JavaScrip
、
事件驱动
的模型。
非阻塞式 I/O
JavaScrip
是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
Node
是一个类似于perl,python,ruby等的一个本地运行环境,理论上可以在它的基础上开发任何应用,使用expressjs库,可在node环境下开发高性能web服务器。
事件驱动
是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。
非阻塞式 I/O
,也叫异步 I/O,显然对应的就是阻塞式 I/O。阻塞式 I/O 是指,当一个线程在执行 I/O 操作时,这个线程会阻塞,等待 I/O 操作完成后继续执行。故使用单线程非阻塞式I/O的node的性能优异。但存在线程崩溃的隐患。
二、安装配置
安装node.js和npm
sudo apt-get install nodejs
sudo apt-get install npm
npm 是 Node.js 的包管理工具,用来安装各种 Node.js 的扩展
验证安装
$ node -v
v10.19.0
$ npm -v
6.14.4
测试js运行环境
$ vi hlwd.js
console.log("hello world")
$ node hlwd.js
hello world #成功
三、创建服务器
Node.js 应用是由以下部分组成:
1.引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
2.创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
3.接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
分析Node.js 的 HTTP 服务器
·第一行请求(
require
)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
·
·接下来调用 http模块提供的函数:
。这个函数会返回 一个对象,这个对象有一个叫做
createServer
的方法,这个方法有一个数值参数,指定这个 HTTP 服务器监听的
listen
。
端口号
引入requred模块
使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http。
vi server.js
创建服务器
使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
测试服务器
以上代码我们完成了一个可以工作的 HTTP 服务器。
使用 node 命令执行以上的代码:
$ node server.js
Server running at http://127.0.0.1:8888/
打开浏览器访问 http://127.0.0.1:8888/,可以看到一个写着 "Hello World"的网页
四、NPM介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
常用 NPM 命令
安装
常用的 Node.js web框架模块 express:
本地安装:将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录);可以通过 require() 来引入本地安装的包。
$ npm install express
全局安装:将安装包放在 /usr/local 下或者你 node 的安装目录;可以直接在命令行里使用。
$ npm install express -g
更新
模块
$ npm update express
搜索
模块
$ npm search express
卸载
express模块
$ npm uninstall express
查看
是否卸载成功
清空NPM本地缓存
$ npm cache clear可以
查看某条命令的详细
帮助
使用package.json
package.json 位于模块的目录下,用于定义包的属性。Package.json 属性说明:
- 包名。
name
- 包的版本号。
version
- 包的描述。
description
- 包的官网 url 。
homepage
- 包的作者姓名。
author
- 包的其他贡献者姓名。
contributors
- 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
dependencies
- 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
repository
main
- main 字段指定了程序的主入口文件,require(‘moduleName’)
就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
- 关键字
keywords
其他命令
#创建模块
$ npm init
#在npm资源库中注册用户
$ npm adduser
#发布模块
$ npm publish
使用淘宝 NPM 镜像
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
之后便可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm,如:
五、Node.js REPL交互式解释器
Node 自带了REPL(Read Eval Print Loop:交互式解释器),可以执行以下任务:
- 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。
读取
- 执行输入的数据结构
执行
- 输出结果
打印
- 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
循环
node.js的REPL类似于python终端,所以只做一些简单补充:
变量声明需要使用
var
关键字
使用下划线
获取上一个表达式的运算结果
_
$ node
> var a = 1 +4
undefined
> var sum = _
undefined
> sum
5
REPL 命令
按下两次 - 退出 Node REPL。
ctrl + c
- 退出 Node REPL.
ctrl + d
- 查看输入的历史命令
向上/向下 键
- 列出当前命令
tab 键
- 列出使用命令
.help
- 退出多行表达式
.break
- 退出多行表达式
.clear
- 保存当前的 Node REPL 会话到指定文件
.save filename
- 载入当前 Node REPL 会话的文件内容。
.load filename
以上,我们已经能够初步的使用node.js了,接下来会介绍node.js的一些特性。