Node基础

130 阅读7分钟

Node.js的定义

  • Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境。
  • 浏览器是JS的一个前端运行环境,Node.js是JS的后端运行环境。
  • NodeJS中没有DOM,也没有BOM,也没有window对象。

fs模块异步读取文件

同步与异步的概念理解

  1. 同步:多个功能按先后顺序执行,后面任务等待前面任务执行完毕后才会执行。
  2. 异步:和同步相反,也就是在发出一个功能调用时,不管有没有得到结果,都会继续往下执行。
  3. 异步的表现形式:以一个回调函数的方式来实现异步任务的执行。

fs.readFile异步读取文件基本写法

语法:fs.readFile(path[, options], callback)
  • path, 读取文件的路径。(相对路径或绝对路径)
  • options:读取文件的参数配置,通常用一个utf8字符串表示。
  • callback:读取完毕的回调函数(err,data) => {}
  • 读取文本内容的文件加utf8 读取非文本内容的文件(例如图片)不加utf8
(err,data)=>{ } 中有两个参数
  • err 代表读取文件出错后的错误对象,如果文件读取成功err的值为null
  • data 代表读取文件成功后的内容,如果读取失败data的值为undefined
  • 如果err参数的值为null则表示读取文件成功,此时data中存储的就是读取到文件的内容。

fs.readFileSync同步读取文件内容

语法:let res = fs.readFileSync(path[, options])
  • path, 读取文件的路径。(相对路径或绝对路径)
  • options:读取文件的参数配置,通常用一个utf8字符串表示即可
同步读取文件处理错误
  • try{}catch{} 处理同步读取文件的错误。
    • try{放有可能出错的代码}
    • catch(error){报错后执行的代码,catch结构会捕获到错误}

fs.writeFileSync同步写入内容

语法:fs.writeFileSync(path,data[, options])
  • path, 被写入文件的路径(相对路径或绝对路径)
  • data:要写入的内容,字符串格式。
  • options:写入文件的参数配置,默认值的utf8编码。
特点:writeFile方法是覆盖式写入,后面的内容会将前面的内容覆盖。

fs.writeFile异步写入内容

语法:fs.writeFile(path,content,utf8,回调函数)
特点:writeFile方法是覆盖式写入,后面的内容会将前面的内容覆盖。

fs模块中的常用方法

API作用备注
fs.access(path, callback)判断路径是否存在
fs.appendFile(file, data, callback)向文件中追加内容
fs.copyFile(src, callback)复制文件
fs.mkdir(path, callback)创建目录
fs.readDir(path, callback)读取目录列表
fs.rename(oldPath, newPath, callback)重命名文件/目录
fs.rmdir(path, callback)删除目录只能删除空目录
fs.stat(path, callback)获取文件/目录信息
fs.unlink(path, callback)删除文件
fs.watch(filename[, options][, listener])监视文件/目录
fs.watchFile(filename[, options], listener)监视文件
fs.existsSync(absolutePath)判断路径是否存在

服务器相关概念

服务器的类型

​ 根据服务不同,服务器的类型也不同:

  • web服务器
  • ftp服务器
  • 数据库服务器

web服务器

  • 用户通过浏览器来享受web服务器提供的服务。
  • 我们用url地址来访问某个web服务器上的资源。
  • 浏览器端发起请求,web服务器收到请求后,响应这个请求,并将处理结果返回给浏览器。
  • 浏览器端与web服务器是通过http协议来进行请求和响应的。

IP地址

  • 全称:Internet Protocol Address
  • 作用:标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址,要访问某个电脑上的资源,先要找到它的ip。在同一个网络中,计算机的IP是不允许相同的,都是唯一的。
  • IPV4格式:[0-255].[0-255].[0-255].[0-255] 即为四个 0-255 的数字组成。
  • 127.0.0.1 特指本机ip地址。(只能自己访问)
  • 192.168.106.2 (这种地址叫做局域网地址)(可以在当前局域网中的所有电脑都可以访问)

域名

  • ip地址的别名,由于ip地址不好记忆,我就给它们取个好记的别名。localhost这个域名特指127.0.0.1这个地址。
  • 域名解析系统:把域名翻译成Ip地址的系统。

端口

  • 一个IP地址的端口可以有65536个,范围是从[0,65535])。不同的端口被不同的软件占用,以提供不同的服务。
  • 服务器要提供服务必须要通过指定的端口。

HTTP协议

  • 制定客户端与服务器之间的通讯规则,不同的协议的作用也不同,主要了解HTTP协议。
  • HTTP(HyperText Transfer Protocol) 超文本传输协议。
  • 协议双方: 浏览器与web服务器都要遵守的协议。
  • 请求通常是由浏览器发起的。
  • HTTP协议中明确规定了请求数据响应数据的格式(报文)
    • 浏览器请求资源要遵守http协议:请求报文(请求行,请求头,请求体)
    • 服务器返回资源要遵守http协议:响应报文(响应行,响应头,响应体)

用http模块写一个简单的web服务器

代码解析

  • 引入核心模块,得到的http是一个对象。
  • http.createServer方法创建一个http服务。参数是一个回调函数:当有http请求进来时,它会自动被调用。请求一次就调用一次。
    • 第一个参数:客户端的请求。
    • 第二个参数:设置对本次请求的响应。
    • 设置响应体,结束请求:res.end()
  • server.listen() 用来监听端口。
    • 格式:server.listen(端口号, [回调函数])
    • 回调是可选的。

修改代码后要重启

  • 更改res.end() 的内容,重启后再次观察。

不同的URL返回不同的内容-req.url

模块化

模块化的定义

  1. 一个js文件可以引入其他的js文件,能使用引入的js文件的中的变量、数据,这种特性就称为模块化。
  2. 使用模块化开发可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题。

nodejs中的模块分类

  1. 核心模块
    • 就是nodejs自带的模块,在安装完nodejs之后,就可以随意使用啦。相当于学习js时使用的Array对象。
    • 例:fs, http, querystring, path
  2. 自定义模块
    • 使用自定义模块实现在index.js中使用tool.js中的加法函数。
    • 自定义模块名称不能与核心模块同名,例如: fs.js 是不行的。
    • 使用固定关键字 require()导入模块,参数带有路径。
  3. 第三方模块
    • 其他程序员写好的模块。nodejs生态提供了一个专门的工具npm来管理第三方模块。
    • 相当于别人写好的函数或者库。例如JQuery库,arttemplate。

导出模块的两种方式

exports 关键字写法 module.exports 关键字写法

  • 两个对象的关系

  • 初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象。(exports是module.exports的别名)

  • 在定义模块时:

    • 如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。
  • 在导出模块过程中,建议只用一种方式(建议直接使用module.exports)

了解npm

定义

  • npm 全称 Node Package Manager(node 包管理器),它的诞生是为了解决 Node 中第三方包共享的问题。
  • npm 不需要单独安装。在安装Node的时候,会连带一起安装npm
  • npm -v检查安装的情况。

包(package)与模块关系

  • nodejs中一个模块就是一个单独的js文件
  • 包是多个模块的集合。一个模块的功能比较单一,所以一个包一般会包含多个模块。
  • npm 管理的单位是包。类似于网站和网页的区别:一个网站一般会包含多个网页。