当前位置: 首页 > 后端技术 > Node.js

node学习基础系列(二)

时间:2023-04-03 16:19:06 Node.js

REPL环境在命令行输入node命令,不带文件名,进入一个Node.jsREPL环境(Read-eval-print循环,“read-eval-输出"循环),可以直接运行各种JavaScript命令。REPL是Node.js与用户交互的shell,里面可以使用各种基本的shell功能,比如使用上下方向键遍历命令异步操作Node使用V8引擎处理JavaScript脚本,最大的特点是单线程操作,一次只能运行一个任务,这导致Node大量使用异步操作(asynchronousoption),即任务不是立即执行,而是插入到任务队列的尾部,待前面的任务运行完毕后再执行。由于这个特点,某个任务的后续操作往往定义在回调函数(callback)的形式。节点约定,如果一个函数需要回调函数作为参数,则回调函数是最后一个参数。另外,回调函数本身的第一个参数约定为上一步传入的错误对象。这是因为回调函数主要用于异步操作。回调函数运行时,前面的操作已经结束,错误的执行栈早已消失。传统的错误捕获机制try...catch对于异步操作是不起作用的,所以只能将error交给回调函数处理。如果没有发生错误,则将null作为第一个参数传递给回调函数。这种写法有一个很大的好处,就是只要判断回调函数的第一个参数,就知道有没有错误。如果不为空,则一定有错误。此外,这允许错误通过层传播。全局变量Node提供了两个全局变量,都以两个下划线开头。__filename:指向当前运行的脚本文件名。__dirname:指向当前运行脚本所在的目录。核心模块http:提供HTTP服务器功能。url:解析网址。fs:与文件系统交互。querystring:解析URL的查询字符串。child_process:创建一个新的子进程。util:提供一系列有用的小工具。路径:处理文件路径。crypto:提供加密和解密功能,基本上是OpenSSL的包装器。核心模块总是首先加载。如果自己写一个HTTP模块,require('http')仍然加载核心模块commonjs,所有代码都在模块作用域内运行,不会污染全局作用域。模块可以多次加载,但第一次加载时只会运行一次,然后缓存运行结果,后面加载时直接读取缓存的结果。要使模块再次工作,必须清除缓存。加载模块的顺序,按照它们在代码中出现的顺序。require.mainrequire方法有一个main属性,可以用来判断模块是直接执行还是调用执行。直接执行时(nodemodule.js),require.main属性指向模块本身。require.main===module//true调用执行时(脚本通过require加载执行),上面的表达式返回false。注意npmupdate,从npmv2.6.1开始,npmupdate只更新顶层模块,不更新依赖的依赖。以前的版本是递归更新的。如果你想获得旧版本的效果,使用下面的命令。$npm--depth9999更新