node.js学习之旅--node.js简介

node.js是一个基于 chrome v8 引擎的 JavaScript 运行环境,node.js 使用了事件的驱动以及非阻塞的I/O的模型使其轻量又高效

Posted by Frewen on October 4, 2018

初识node.js

Node.js应用开发(上).png

为什么学习node.js?

  • 前端开发人员进行学习node.js 可以实现前端和后端的开发,进行全栈开发

  • 前端部署工具,前端自动化工具的使用

  • node.js的npm管理器有全球最大的第三方库,供前端开发人员进行使用(引入第三方工具)

node.js学习安排

本课程会学到三种类型的应用程序开发:命令行程序、web 服务器网站、Javascript

00.png

本课程会选择 Linux 作为开发环境

因为现在很多程序的开发环境和部署环境都是 Linux,这样会方便程序的测试和调试,而且可以创造一个
学习和使用 Linux的场景。

搭建开发环境

下载并安装 vmware workstation Pro 12+(软件密匙5A02H-AU243-TZJ49-GTC7K-3C61N

下载并导入 mocha.ova 开发环境

01.png

配置mocha虚拟机网卡的ip地址信息

  • 查看mocha虚拟机的ip地址(ifconfig)

  • 配置虚拟的的ip地址和vmnet8的ip网段相同(192.168.80.144)

root@office# vim/etc/sysconfig/network-scripts/ifcfg-ens32
ipaddr = 192.168.80.144
gateway= 192.168.80.2
  • 重启网络进行配置
    systemctl restart network
    

    下载并安装 xshell 5(在xshell5中进行连接,连接的登录名为wangding,密码为ddd 连接的快捷键alt + o)

vim的基本使用

vi简介

vim文本文件编辑,vi是命令行界面下的文字处理软件,目前,主流的文字处理软件有:vim, emacs, nano

vi 是visual的缩写,vim是visual improved的缩写

~ » type vi                                             wangding@OFFICE
vi is an alias(别名) for vim
------------------------------------------------------------
~ » file /usr/bin/vi                                    wangding@OFFICE
/usr/bin/vi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked 
(uses shared libs), for GNU/Linux 2.6.32,BuildID[sha1]=97a17f3a9bea3d8c0490c12247b
5e89c47cbcd28, stripped

vim的使用

​​ start and stop vi

在命令行模式下输入vim 或者 vim model.js 即可启动vi

~ » vim                                                 wangding@OFFICE 
# 保存后会创建一个新的文件
------------------------------------------------------------
~ » vim model.js                                        wangding@OFFICE 
# 会创建一个新的文件

07.png

在命令行模式下输入:q 退出 :q! 强制退出(不关心发生的改变) :wq 保存并退出 :w 保存

​​ edit model

vim 存在normal模式和insert模式。

# normal模式向insert模式进行转变的方式:
+ insert模式向normal模式 a append i insert
+ normal模式向insert模式 esc escape
​​ normal模式下的光标移动按键操作
按键 移动光标
l or 右箭头 向右移动一个字符
h or 左箭头 向左移动一个字符
j or 下箭头 向下移动一行
k or 上箭头 向上移动一行
0 (零按键) 移动到当前行的行首。
^ 移动到当前行的第一个非空字符。
$ 移动到当前行的末尾。
w 移动到下一个单词或标点符号的开头。
W 移动到下一个单词的开头,忽略标点符号。
b 移动到上一个单词或标点符号的开头。
B 移动到上一个单词的开头,忽略标点符号。
Ctrl-f or Page Down 向下翻一页
Ctrl-b or Page Up 向上翻一页
numberG 移动到第 number 行。例如,1G 移动到文件的第一行。
G 移动到文件末尾。

​​ 移动光标键是可以和数字进行结合的,比如5j 就是向移动了5个单位(即移动了5行)

​​ edit file

普通模式中,在当前光标后追加文本的快捷键是什么?在行位追加文本的快捷键是什么?在行首追加文本的快捷键是什么?

a 在当前光标的后一个单词进行追加 a(追加)ppen
A 在当前光标的行末进行追加
i 在当前光标的前一个单词进行追加 (追加)appen
I 在当前光标的行首进行追加</pre>

| 命令 | 打开行 | | —- | ———– | | o | 当前行的下方打开一行。 | | O | 当前行的上方打开一行。 |

​​ edit delete
命令 删除的文本
x 当前字符
3x 当前字符及其后的两个字符。
dd 当前行。
5dd 当前行及随后的四行文本。
dW 从光标位置开始到下一个单词的开头。
d$ 从光标位置开始到当前行的行尾。
d0 从光标位置开始到当前行的行首。
d^ 从光标位置开始到文本行的第一个非空字符。
dG 从当前行到文件的末尾。
d20G 从当前行到文件的第20行。
​​ edit copy

yy代表的是复制操作,p是进行粘贴的操作,其中P表示在当前行的前一行进行复制

命令 复制的内容
yy 当前行。
5yy 当前行及随后的四行文本。
yW 从当前光标位置到下一个单词的开头。
y$ 从当前光标位置到当前行的末尾。
y0 从当前光标位置到行首。
y^ 从当前光标位置到文本行的第一个非空字符。
yG 从当前行到文件末尾。
y20G 从当前行到文件的第20行。
​​ search and replace

| 条目 | 含义 | | ———- | —————————————- | | : | 冒号字符运行一个 ex 命令。 | | % | 指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范围也可以用 1,5 来代替(因为我们的文件只有5行文本),或者用 1,$ 来代替,意思是 “ 从第一行到文件的最后一行。”如果省略了文本行的范围,那么操作只对当前行生效。 | | s | 指定操作。在这种情况下是,替换(查找与替代)。 | | /Line/line | 查找类型与替代文本。 | | g | 这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则只替换每个文本行中第一个匹配的字符串。 |

:%s/lang/frewen/g
# 将所有的lang替换为frewen

替换确认按键

按键 行为
y 执行替换操作
n 跳过这个匹配的实例
a 对这个及随后所有匹配的字符串执行替换操作。
q or esc 退出替换操作。
l 执行这次替换并退出。l 是 “last” 的简写。
Ctrl-e, Ctrl-y 分别是向下滚动和向上滚动。用于查看建议替换的上下文。
​​ edit one more file
  • 同时打开多个文档 vi file-name1 file-name2

  • 文档之间的切换 :n 切换到下一个文档 :N 切换到上一个文档

  • 在插入模式下如何前、后、上、下,移动光标:ctrl-f, ctrl-b, ctrl-p, ctrl-n

  • 在插入模式下快捷键如何删除当前光标前的一个单词?如何删除当前光标到行首?如何删除当前光标到行尾?

    ctrl-w, ctrl-u, ctrl-k  
    

    node.js简介

node.js是什么

node.js是一个基于 chrome v8 引擎的 JavaScript 运行环境

node.js简介

node.js 作为 JavaScript 的运行环境,包括两层含义

  • JavaScript 通过 node.js 在服务器上运行,这样 node.js 好像就是 JavaScript 的虚拟机

  • node.js 提供大量的 API,使 JavaScript 语言与操作系统互动(读写文件、创建进程)

node.js API

node.js API包含两个部分:全局对象和普通模块(我们学习主要学习的是node.js 的API)

node.jsAPI

node.js 架构

node.js架构

如上图所示,node.js 架构分为三层:

  • 顶层是 node.js 标准库,例如:fs,stream等模块

  • 中间层是node.js 绑定层,连接底层的V8 和 顶层的node.js 的标准库,起到桥梁的作用

  • 底层有 V8,libuv 等模块,是通过C/C++进行编写的

node.js 的特点

node.js 使用了事件的驱动以及非阻塞的I/O的模型使其轻量又高效

node.js特点

阻塞 I/O 和非阻塞 I/O
  • 阻塞 I/O 意味着一个或多个请求在处理时要排队(多线程)

  • 非阻塞 I/O ,采用事件轮询的异步模式(单线程)

    可以理解成:同学们有问题,阻塞 I/O 相当于课上提问,一个一个的来;
    非阻塞 I/O 相当于在线上,所有同学把问题发到 QQ 群里,然后老师解决了哪个,就把答案发给谁。  
    

编写 hello world 命令行程序

  • 创建 nodejs-demo 目录

  • 把 .tern-project 代码自动补全配置文件,放到 nodejs-demo 目录下,操作方法如下:

    • 在 nodejs-demo 目录下,运行 wget https://sample.wangding.in/nodejs/tern-project

    • 在 nodejs-demo 目录下,运行 mv tern-project .tern-project

  • 创建 01-introduction 目录

  • 编写 01-hello-world.js

  • 在命令行打印 hello world! 字符

#!/usr/bin/node

console.log('Hello World!');
  • 在 node.js 中运行某个脚本文件的命令是 node file-name

  • REPL 是什么?如何进入 REPL 模式?

Read-Eval-Print-Loop 四个单词的首字母缩写,意思是:读取-求值-输出-循环。
执行 node 命令,进入 REPL 模式。  
  • 退出 REPL 模式 Ctrl+D

  • 运行 node.js 脚本文件时要省略 node 命令,如何操作

在脚本代码前面加入#!/usr/bin/node,并对脚本文件增加可执行权限
增加 linux 文件的可执行权限 chmod u+x file-name  

编写 hello world web 程序

  • 编写 02-hello-world-server.js

  • 监听端口:8080

  • 当收到 HTTP 请求时,发送响应文本 hello world!

  • 用浏览器测试 web 程序

  • 用 curl linux 命令行程序测试 web 程序

#!/usr/bin/node

var http = require('http');
http.createServer(function(req,res)=>{
  res.end('hello world');
}).listen(8080);