Node.js 中实现HTTP文件下载
HTTP实现文件下载时,只要在服务器设置好相关响应头,并使用二进制传输文件数据即可,而客户端(浏览器)会根据响应头接收文件数据。而在Node.js中,设置好响应头后,读取文件流,再使用.pipe()
方法将流转接到响应对象Response
就可以实现一个简单的文件下载服务器。
HTTP实现文件下载时,只要在服务器设置好相关响应头,并使用二进制传输文件数据即可,而客户端(浏览器)会根据响应头接收文件数据。而在Node.js中,设置好响应头后,读取文件流,再使用.pipe()
方法将流转接到响应对象Response
就可以实现一个简单的文件下载服务器。
Node.js应用中可能会发生多种类型的错误。如:当出现语法错误
或运行时错误
时,会触发JavaScript错误
;当试图试访问一个不存在或没有访问的文件时,会触发系统错误
;除JavaScript错误
和系统错误
错误外,用户还可以自定义错误。理解Node.js中错误类型,可以帮我们更好的进行错误处理和异常捕获。
在ECMAScript 2015(ES6)推出TypeArray
标准之前,JavaScript语言处理二进制数据非常困难,这在后端开发中使用很不方便。Node.js中的Buffer
类就是为了解决二进制数据处理的问题,该类为Node.js带来了如TCP流操作和文件系统流操作的能力。ECMAScript 2015中TypeArray
做为语言标准被引入,使JavaScript可以原生处理二进制数据。那么,在Node.js开发中我们是应该使用Buffer
还是应该使用TypeArray
呢?
核心(原生)模块是指那些随Node.js安装而安装的模块,这些模块在Node.js源代码编译时被编译成二进制执行文件。相比文件模块,核心(原生)模块的加载速度更快。核心(原生)模块提供了JavaScript语言之外处理能力,如:网络处理相关模块http
、net
、dgram
,文件及流处理fs
、stream
,二进制处理模块buffer
,系统与进程os
、process
……
Node.js实现了一个简单的模块加载系统。在Node.js中,文件和模块是一一对应的关系,可以理解为一个文件就是一个模块。其模块系统的实现主要依赖于全局对象module
,其中实现了exports
(导出)、require()
(加载)等机制。
在一个用户进程中存在标准输入("stdin")、标准输出("tdout")、标准错误("stderr")三种流。Node.js中,对日志的操作是基于stdout
、stderr
两种流,如:console.log
方法是向stdout
写入数据,console.error
是向stderr
写入数据。通过stdout
和stderr
,或实现自定义Console
对象,可以将普通日志及错误日志分别写入到不同的文件中。
Node.js 安装后,会同时提供一个命令行(CLI
)工具。通过这个命令行工具,可以运行Node程序。通过它提供的一些命令参数选项,这些参数向内置的调试器,提供了多种脚本执行方式及其它有用的运行选项。
repl
是Node.js提供的一个Read-Eval-Print-Loop (REPL,读取-执行-输出-循环)实现,它即可以做为一个独立的程序使用,又可以包含在其它应用中使用。REPL是一个互式命令行解析器,它提供了一个交互式的编程环境,它可以实时的验证你所编写的代码,非常适合于验证Node.js和JavaScript的相关API。
Node.js插件(Addons
)是C/C++编写的动态链接对象,这些对象可以被Node.js的require()
函数引用,并可以像普通的Node.js模块一样使用。Addons
主要用于提供一个Node.js中运行的JavaScript和C/C++库之间的接口。