Node.js 官网入门教程(四) EventEmitter、HTTP(GET、POST(axios))、Express、fs文件模块(描述符、属性、路径、读取、写入、文件夹)

Node.js 官网入门教程(四) EventEmitter、HTTP(GET、POST(axios))、Express、fs文件模块(描述符、属性、路径、读取、写入、文件夹)

总结:

  • 通用

    • Node.js安装包:http://nodejs.cn/download/。

    • API检索网址:API 文档 | Node.js 中文网 (nodejs.cn)

    • 第三方模板引擎:art-template官方文档

    • npm init 生成 package.json文件

    • Express:

      • 提供了创建 Web 服务器的最简单但功能最强大的方法之一。 它的极简主义方法,专注于服务器的核心功能,是其成功的关键。
      • 基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
    • koa: 由 Express 背后的同一个团队构建,旨在变得更简单更轻巧。 新项目的诞生是为了满足创建不兼容的更改而又不破坏现有社区。

    • readyState

      • 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
      • 0: 请求未初始化
      • 1: 服务器连接已建立
      • 2: 请求已接收
      • 3: 请求处理中
      • 4: 请求已完成,且响应已就绪
    • status

      • 200, OK,访问正常
      • 301, Moved Permanently,永久移动
      • 302, Moved temporarily,暂时移动
      • 304, Not Modified,未修改
      • 307, Temporary Redirect,暂时重定向
      • 401, Unauthorized,未授权
      • 403, Forbidden,禁止访问
      • 404, Not Found,未发现指定网址
      • 500, Internal Server Error,服务器发生错误
    • MIME Type

      • MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,说白了也就是文件的媒体类型。浏览器可以根据它来区分文件,然后决定什么内容用什么形式来显示。

      • 首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。

      • 媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:

        Content-Type: text/HTML

        • 表示内容是 text/HTML 类型,也就是超文本文件。为什么是“text/HTML”而不是“HTML/text”或者别的什么?MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范 (顺便说一句,Email 附件的类型也是通过 MIME Type 指定的)。
  • CLI

    • 命令行界面(英语:command-line interface缩写CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面CUI)。
    • 通常认为,命令行界面(CLI)没有图形用户界面GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。
  • HTTP

    • GET、POST
      • GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母或数字,则原样发送;如果是空格,转换为+;如果是中文或其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII码值。而与之对应的,POST把提交的数据放置在HTTP包的包体中,文章最下面将会有代码示例。
      • POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为:(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击(CSRF,跨站请求伪造,也被称为:one click attack/session riding)。
  • fs文件模块

    • fs.open()

      • fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
                  
          //fd 是文件描述符。
        })
        
      • r+ 打开文件用于读写。

      • w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。

      • a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。

      • a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。

    • fs.stat()

      • 每个文件都带有一组详细信息,可以使用 fs.stat() 进行检查。
      • 使用 stats.isFile()stats.isDirectory() 判断文件是否目录或文件。
      • 使用 stats.isSymbolicLink() 判断文件是否符号链接。
      • 使用 stats.size 获取文件的大小(以字节为单位)。
    • 路径

      • dirname: 获取文件的父文件夹。
      • basename: 获取文件名部分。
      • extname: 获取文件的扩展名。
      • 如果第一个参数以斜杠开头,则表示它是绝对路径
      • path.join() 连接路径的两个或多个片段
      • path.resolve() 获得相对路径的绝对路径计算
      • path.normalize() 当包含诸如 ... 或双斜杠之类的相对说明符时,其会尝试计算实际的路径
    • 读取文件

      • fs.readFile() 方法: Node.js 中读取文件最简单的方式

      • fs.readFileSync():同步的版本

      • fs.readFile()fs.readFileSync() 都会在返回数据之前将文件的全部内容读取到内存中。

        这意味着大文件会对内存的消耗和程序执行的速度产生重大的影响。

        在这种情况下,更好的选择是使用流来读取文件的内容。

    • 写入文件

      • fs.writeFile() API
      • fs.writeFileSync()
      • fs.appendFile()(及其对应的 fs.appendFileSync())追加到文件末尾
    • 文件夹

      • fs.access() 检查文件夹是否存在以及 Node.js 是否具有访问权限
      • fs.mkdir()fs.mkdirSync() 可以创建新的文件夹
      • fs.readdir()fs.readdirSync() 可以读取目录的内容
      • fs.rename()fs.renameSync() 可以重命名文件夹
      • fs.rmdir()fs.rmdirSync() 可以删除文件夹
      • 删除包含内容的文件夹可能会更复杂。最好安装 fs-extra 模块

1. Node.js 事件触发器(EventEmitter)

如果你在浏览器中使用 JavaScript,则你会知道通过事件处理了许多用户的交互:鼠标的单击、键盘按钮的按下、对鼠标移动的反应等等。

在后端,Node.js 也提供了使用 events 模块构建类似系统的选项。

具体上,此模块提供了 EventEmitter 类,用于处理事件。

使用以下代码进行初始化:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

该对象公开了 onemit 方法。

  • emit 用于触发事件。
  • on 用于添加回调函数(会在事件被触发时执行)。

例如,创建 start 事件,并提供一个示例,通过记录到控制台进行交互:

eventEmitter.on('start', () => {
   
  console.log('开始')
})

当运行以下代码时:

eventEmitter.emit('start')

事件处理函数会被触发,且获得控制台日志。

可以通过将参数作为额外参数传给 emit() 来将参数传给事件处理程序:

eventEmitter.on('start', number => {
   
  console.log(`开始 ${
     number}`)
})

eventEmitter.emit('start', 23)

多个参数:

eventEmitter.on('start', (start, end) => {
   
  console.log(`${
     start}${
     end}`)
})

eventEmitter.emit('start', 1, 100)

EventEmitter 对象还公开了其他几个与事件进行交互的方法,例如:

  • once(): 添加单次监听器。
  • removeListener() / off(): 从事件中移除事件监听器。
  • removeAllListeners(): 移除事件的所有监听器。

可以在事件模块的页面 http://nodejs.cn/api/events.html 上阅读其所有详细信息。

2. 搭建 HTTP 服务器

这是一个简单的 HTTP web 服务器的示例:

const http = require('http')

const port = 3000

const server = http.createServer((req, res) => {
   
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('你好世界\n')
})

server.listen(port, () => {
   
  console.log(`服务器运行在 http://${
     hostname}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChrisP3616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值