Node.js学习笔记

Node.js简介

• Node.js是一个能够在服务器端运行JavaScript的开放源代码、 跨平台JavaScript运行环境。

• Node采用Google开发的V8引擎运行js代码,使用事件驱动、 非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。

• Node大部分基本模块都用JavaScript编写。在Node出现之前, JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。

• Node主要用于编写像Web服务器一样的网络应用,这和PHP 和Python是类似的。

• 但是Node与其他语言最大的不同之处在于,PHP等语言是阻 塞的而Node是非阻塞的。

• Node是事件驱动的。开发者可以在不使用线程的情况下开发 出一个能够承载高并发的服务器。其他服务器端语言难以开发 高并发应用,而且即使开发出来,性能也不尽人意。

• Node正是在这个前提下被创造出来。

• Node把JS的易学易用和Unix网络编程的强大结合到了一起。

• Node.js允许通过JS和一系列模块来编写服务器端应用和网络 相关的应用。

• 核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、 TLS/SSL等)、二进制数据流、加密算法、数据流等等。Node 模块的API形式简单,降低了编程的复杂度。

• 使用框架可以加速开发。常用的框架有Express.js、Socket.IO 和Connect等。Node.js的程序可以在Microsoft Windows、 Linux、Unix、Mac OS X等服务器上运行。

• Node.js也可以使用CoffeeScript、TypeScript、Dart语言,以 及其他能够编译成JavaScript的语言编程。

模块引用

• 在规范中,定义了require()方法,这个方 法接手模块标识,以此将一个模块引入到 当前运行环境中。

• 模块引用的示例代码: – var math = require('math');

模块定义

• 在运行环境中,提供了exports对象用于导 出当前模块的方法或者变量,并且它是唯 一的导出的出口。

• 在模块中还存在一个module对象,它代表 模块自身,而exports是module的属性。

• 在Node中一个文件就是一个模块。

exports.xxx = function() {};
module.exports = {};

模块标识

• 模块标识其实就是模块的名字,也就是传 递给require()方法的参数,它必须是符合 驼峰命名法的字符串,或者是以.、..开头的 相对路径、或者绝对路径。

• 模块的定义十分简单,接口也十分简洁。 每个模块具有独立的空间,它们互不干扰, 在引用时也显得干净利落。

 

Node的模块实现

• Node中虽然使用的是CommonJS规范,但是 其自身也对规范做了一些取舍。

• 在Node中引入模块,需要经历如下3个步骤: – 路径分析 – 文件定位 – 编译执行

• 在Node中,模块分为三类:一类是底层由 C++编写的内建模块,一类是Node提供的核 心模块;还有一类是用户编写的模块,称为文 件模块。

包 package

• CommonJS的包规范允许我们将一组相关 的模块组合到一起,形成一组完整的工具。

• CommonJS的包规范由包结构和包描述文 件两个部分组成。

• 包结构 – 用于组织包中的各种文件

• 包描述文件 – 描述包的相关信息,以供外部读取分析

包结构

• 包实际上就是一个压缩文件,解压以后还 原为目录。符合规范的目录,应该包含如 下文件:

– package.json 描述文件

– bin 可执行二进制文件

– lib js代码

– doc 文档

– test 单元测试

包描述文件

• 包描述文件用于表达非代码相关的信息, 它是一个JSON格式的文件 – package.json, 位于包的根目录下,是包的重要组成部分。

• package.json中的字段

– name、description、version、keywords、 maintainers、contributors、bugs、 licenses、repositories、dependencies、 homepage、os、cpu、engine、builtin、 directories、implements、scripts、author、 bin、main、devDependencies。

NPM(Node Package Manager)

• CommonJS包规范是理论,NPM是其中一 种实践。

• 对于Node而言,NPM帮助其完成了第三 方模块的发布、安装和依赖等。借助NPM, Node与第三方模块之间形成了很好的一个 生态系统。

NPM命令

• npm –v

– 查看版本

• npm

– 帮助说明

• npm search 包名

– 搜索模块包

• npm install 包名

– 在当前目录安装包

• npm install 包名 –g

– 全局模式安装包

• npm remove 包名

– 删除一个模块

• npm install 文件路径

– 从本地安装

• npm install 包名 –registry=地址

– 从镜像源安装

• npm config set registry 地址

– 设置镜像源

 

Buffer(缓冲区)

• 从结构上看Buffer非常像一个数组,它的元 素为16进制的两位数。

• 实际上一个元素就表示内存中的一个字节。

• 实际上Buffer中的内存不是通过JavaScript 分配的,而是在底层通过C++申请的。

• 也就是我们可以直接通过Buffer来创建内存中的空间。

Buffer的操作

• 使用Buffer保存字符串

let str = "你好 nodejs"; 

let buf = Buffer.from(str , "utf-8"); 

• 创建指定大小的Buffer对象

let buf3 = Buffer.alloc(1024*8)

Buffer的转换

• Buffer与字符串间的转换

– 支持的编码:

• ASCII、UTF-8、UTF-16LE/UCS-2、Base64、 Binary、Hex

– 字符串转Buffer

• Buffer.from(str , [encoding]);

– Buffer转字符串

• buf.toString([encoding] , [start] , [end]);

 

写入操作

• 向缓冲区中写入字符串

– buf.write(string[, offset[, length]][, encoding])

• 替换指定索引位置的数据

– buf[index]

• 将指定值填入到缓冲区的指定位置

– buf.fill(value[, offset[, end]][, encoding])

读取操作

• 将缓冲区中的内容,转换为一个字符串返回

– buf.toString([encoding[, start[, end]]])

• 读取缓冲区指定索引的内容

– buf[index]

其他操作

• 复制缓冲区

– buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

• 对缓冲区切片

– buf.slice([start[, end]])

• 拼接缓冲区

– Buffer.concat(list[, totalLength])

 

fs(文件系统)

• 在Node中,与文件系统的交互是非常重要 的,服务器的本质就将本地的文件发送给 远程的客户端

• Node通过fs模块来和文件系统进行交互

• 该模块提供了一些标准文件访问API来打开、 读取、写入文件,以及与其交互。

• 要使用fs模块,首先需要对其进行加载 – const fs = require("fs");

同步和异步调用

• fs模块中所有的操作都有两种形式可供选择 同步和异步。

• 同步文件系统会阻塞程序的执行,也就是 除非操作完毕,否则不会向下执行代码。

• 异步文件系统不会阻塞程序的执行,而是 在操作完成时,通过回调函数将结果返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值