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

Node.js纯自学第一课认知,安装,运行,模块

时间:2023-04-03 18:15:33 Node.js

接下来我的部分时间将花在学习node.js什么是NodeJSJS是一种脚本语言,脚本语言需要解析器才能运行.对于用HTML页面编写的JS,浏览器充当解析器。对于需要独立运行的JS,NodeJS是一个解析器。每个解析器都是一个运行环境,它不仅可以让JS定义各种数据结构,进行各种计算,还可以让JS使用运行环境提供的内置对象和方法来做一些事情。比如JS在浏览器中运行的目的是为了操作DOM,浏览器提供了document等内置对象。JS运行在NodeJS中的目的是操作磁盘文件或搭建HTTP服务器,NodeJS相应地提供了fs、http等内置对象。什么用途?虽然也有同学听说可以直接运行JS文件觉得很酷,但是大部分同学首先关心的是新东西的用途,接触新东西能带来什么价值。NodeJS的作者说,创建NodeJS的目的是为了实现一个高性能的Web服务器。他首先看重的是事件机制和异步IO模型的优越性,而不是JS。但是他需要选择一种编程语言来实现他的想法。这种编程语言不能自带IO功能,需要很好的支持事件机制。JS本身没有IO功能,天生就是为了处理浏览器中的DOM事件,拥有一大批程序员,所以成为了理所当然的选择。如他所愿,NodeJS在服务器端活跃起来,大量基于NodeJS的Web服务出现。另一方面,NodeJS让前端如神器一般,终于可以让它的能力覆盖跳出浏览器窗口,更多的前端工具如雨后春笋般涌现。所以,对于前端来说,虽然不是每个人都需要用NodeJS来写服务端程序,但是简单的是命令交互方式调试JS代码片段,复杂的是写工具提高工作效率。NodeJS生态系统正在蓬勃发展。如何安装安装程序NodeJS提供了几个安装程序,可以在nodejs.org下载和安装。Windows系统选择与系统版本匹配的.msi后缀的安装文件。在MacOSX下,选择带有.pkg后缀的安装文件。编译安装Linux系统下没有现成的安装程序。虽然有些发行版可以使用apt-get或者其他方式安装,但不一定能安装到最新版本。因此,在Linux系统下,一般采用如下编译方式安装NodeJS。确保系统g++版本在4.6以上,python版本在2.6以上。从nodejs.org下载最新版本的tar.gz后缀的NodeJS源码包,解压到某个位置。进入解压后的目录,使用如下命令编译安装。$./configure$make$sudomakeinstall我在windows下安装node。安装方法是从官网下载对应系统的msi文件。我的是64位系统,然后一步步安装。里面没有什么可以说的。一切都在接下来。接下来开始测试节点是否安装成功。这很明显,说明安装成功。如何运行打开终端,输入node进入命令交互模式,可以输入一段代码语句,立即执行并显示结果,例如:如果要运行一大段代码,可以写一段JS文件,然后运行它。比如有下面这个hello.js。hello.js中的代码是functionhello(){console.log('HelloWorld!66666666');}hello();写好后在终端输入nodehello.js运行,结果如下:Linux系统权限问题,使用NodeJS监听80或443端口提供HTTP(S)服务时,需要root权限。有两种方法可以做到这一点。一种方法是使用sudo命令运行NodeJS。例如,通过以下命令运行的server.js有权限使用80和443端口。一般推荐这种方式,以保证root权限只提供给需要的JS脚本。$sudonodeserver.js另一种方法是使用chmod+s命令使NodeJS始终以root权限运行。具体方法如下。因为这种方式让任何JS脚本都拥有root权限,所以不是很安全,所以不建议需要考虑安全性的系统使用。$sudochownroot/usr/local/bin/node$sudochmod+s/usr/local/bin/nodemodule在编写稍微大一点的程序时,一般会把代码模块化。在NodeJS中,一般会把代码合理的拆分成不同的JS文件,每个文件就是一个模块,文件路径就是模块名。在编写每个模块时,都有三个预定义的变量,require、exports和module可供使用。requirerequire函数用于加载和使用当前模块中的其他模块,传入一个模块名,返回一个模块导出对象。模块名称可以使用相对路径(以./开头),也可以使用绝对路径(以/或C:等盘符开头)。此外,模块名称中的.js扩展名可以省略。下面是一个例子。varfoo1=require('./foo');varfoo2=require('./foo.js');varfoo3=require('/home/user/foo');varfoo4=require('/home/user/foo.js');//foo1到foo4存放的对象是同一个模块的导出对象。或者,可以通过以下方式加载和使用JSON文件。vardata=require('./data.json');exportsexports对象是当前模块的导出对象,用于导出模块的公共方法和属性。当其他模块通过require函数使用当前模块时,得到的是当前模块的exports对象。在下面的示例中,导出了一个公共方法。exports.hello=function(){console.log('HelloWorld!');};module可以通过module对象访问当前模块的一些相关信息,但是最常见的用途是替换当前模块的export对象。例如,模块导出对象默认是一个普通对象。如果你想把它变成一个函数,你可以使用下面的方法。module.exports=function(){console.log('HelloWorld!');};在上面的代码中,模块的默认导出对象被替换为一个函数。模块初始化模块中的JS代码只在模块第一次使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存的导出对象被重用。主模块通过命令行参数传递给NodeJS以启动程序的模块称为主模块。主模块负责调度组成整个程序的其他模块完成各自的工作。例如,当通过以下命令启动程序时,main.js是主模块。$nodemain.js完整示例有以下目录。/home/user/hello/util/counter.jsmain.js其中counter.js内容如下:vari=0;函数计数(){return++i;}exports.count=count;该模块定义了一个私有变量i,并在exports对象中导出了一个公共方法count。主模块main.js的内容如下:varcounter1=require('./util/counter');varcounter2=require('./util/counter');console.log(counter1.count());console.log(counter2.count());console.log(counter2.count());程序运行结果如下:$nodemain.js123可以看到counter.js没有被初始化两次,因为它被require了两次。二进制模块虽然一般我们使用JS来编写模块,但NodeJS也支持用C/C++编写二进制模块。编译后的二进制模块,除了文件扩展名是.node,其他使用方法和JS模块一样。二进制模块虽然可以使用操作系统提供的所有功能,潜力无限,但是前端同学写起来难度太大,而且难以跨平台使用,所以本教程不涉及。小结本章介绍了NodeJS的基本概念和使用方法。综上所述,总结了以下知识点:NodeJS是一个JS脚本解析器。在任何操作系统下安装NodeJS的本质都是将NodeJS执行程序复制到一个目录下。然后确保这个目录在系统PATH环境变量下,这样就可以在终端中使用node命令了。直接在终端输入node命令,进入命令交互模式,非常适合测试一些JS代码片段,比如正则表达式。NodeJS采用CMD模块系统,主模块作为程序的入口,所有模块在执行过程中只初始化一次。除非JS模块不能满足需求,否则不要轻易使用二进制模块,否则你的用户会抱怨。未完待续,我觉得技术人员最大的核心竞争力就是学习能力!