Node.js 基础介绍

windows系统中配置环境变量问题:

windows系统中需要配置环境变量,环境变量其实指的是一个个的路径。当我们在命令行窗口打开一个文件,或调用一个程序时,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止,如果没找到则报错。因此我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样就可以在任意为止访问这些文件和程序。

进程和线程

进程

  • 进程负责为程序的运行提供必备的环境
  • 进程相当于工厂中的车间

线程

  • 线程计算机中的最小的额计算单位,线程负责执行进程中的程序
  • 线程就相当于工厂中的工人

单线程

  • JS,Node是单线程
  • Node的服务器是单线程的,但是在后台拥有一个 I/O 线程池

多线程

  • 传统的服务器都是多线程的,每进来一个请求,就创建一个线程去处理请求
Node.js简介
  • Node.js能够在服务器端运行JS
  • Nod采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能
  • Node大部分基本模块都使用JavaScript编写
Node的用途
  • Web服务API,比如REST
  • 实时多人游戏
  • 后端的Web服务,例如跨域,服务器端的请求
  • 基于Web的应用
  • 多客户端的通信,如即时通信

在node中有一个全局对象 global , 他的作用和网页中 window 类似,

在全局中创建的变量都会作为 global 的属性保存

在全局中创建的函数都会作为 global 的方法保存

当node 在执行模块中的代码时,它会将代码包装载下面的函数中执行,并且在函数执行时,同时传递进了5个实参。(遵循CommonJS的规范)

function (exports,require,module,__filename,__dirname) {
    
}
exports
  • 该对象用来将变量或函数暴露到外部
require
  • 函数,用来引入外部的模块
module
  • module代表的是当前模块本身

  • exports就是module的属性

  • module.exports == exports

__filename
  • 当前模块的完整路径
__dirname
  • 当前模块所在文件夹的完整路径

这五个属性都是可以直接用的

exports 和 module.exports
  • 通过exports 只能使用 . 的方式向外暴露内部变量
    • exports.xxx = xxx
  • 而module.exports既可以通过 . 的形式,也可以直接赋值
    • module.exports.xxx = xxx
    • module.exports =
node 诞生的初衷

node诞生的初衷是为了解决 I/O 阻塞的问题。因为传统的服务器都是多线程的,会导致 I/O阻塞。而node 是单线程的,会缓解阻塞

node和npm关系:

node.js是javascript的一种运行环境,是对Google V8引擎进行的封装。是一个服务器端的javascript的解释器。

包含关系,nodejs中含有npm,比如说你安装好nodejs,你打开cmd输入npm -v会发现出啊线npm的版本号,说明npm已经安装好。

引用大神的总结:

其实npm是nodejs的包管理器(package manager)。我们在Node.js上开发时,会用到很多别人已经写好的javascript代码,如果每当我们需要别人的代码时,都根据名字搜索一下,下载源码,解压,再使用,会非常麻烦。于是就出现了包管理器npm。大家把自己写好的源码上传到npm官网上,如果要用某个或某些个,直接通过npm安装就可以了,不用管那个源码在哪里。并且如果我们要使用模块A,而模块A又依赖模块B,模块B又依赖模块C和D,此时npm会根据依赖关系,把所有依赖的包都下载下来并且管理起来。试想如果这些工作全靠我们自己去完成会多么麻烦!

npm install 包名 --save // 安装包并添加到依赖中

npm install 包名 -g // 全局安装包(全局安装的包一般都是一些工具包)

Buffer(缓冲区),用来保存数据
  • Buffer的结构和数组很像,操作的方法也和数组类似
  • 数组中不能存储二进制的文件,而Buffer是专门用来存储二进制数据
  • 使用buffer不需要引入模块,直接使用即可
  • 在buffer中存储的都是二进制数据,但是在显示时都是以十六进制的形式显示的(00 ~ ff, 因为计算机中最小的数据存储单位是字节(Byte),计算机最小的数据传输单位是:位/比特(bit), 一个字节等于8bit, 所以存储时是 00000000 ~ 11111111, 也就是 00 ~ ff)
fs (文件系统)

通过Node 来操作系统中的文件。服务器的本质就是将本地的文件发送过远程的客户端

  • 使用fs不需要引入模块,直接使用即可const fs = require('fs');
  • 打开文件 > 写入内容 > 关闭文件

同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出。这时就需要流式文件写入。

创建一个可写流 fs.createWriteStream

打开流 > 写入内容 > 关闭流

pipe() 可以将可读流中的东西直接输入到可写流中

var fs = require("fs")

// 创建一个可读流
var rs = fs.createReadStream("c:/User/aaa")

// 创建一个可写流
var ws = fs.createWriteStream("b.mps");

// pipe()  可以将可读流中的东西直接输入到可写流中
rs.pipe(ws)
posted @ 2021-01-14 10:01  小蜗蜗蜗牛^o^  阅读(115)  评论(0编辑  收藏  举报