Node.js | Node.js简介

一、什么是node.js

为什么 JavaScript 可以在浏览器中被执行?

通过每个浏览器不同的 JavaScript解析引擎。

  • Chrome 浏览器 => V8
  • FireFox 浏览器 => OdinMonkey (奥丁猴)
  • Safri 浏览器 => JSCore
  • IE 浏览器 => Chakra (查克拉)
  • ...........

注意:

  1. 引擎负责 解析 和 执行 JavaScript 代码
  2. 内置API 是由运行环境提供的特殊接口(浏览器提供),只能在所属的运行环境中被调用

Node.jsJavaScript语言的服务器运行环境

  • Node.js 就是运行在服务端的 JavaScript。
  • Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
  • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

注意:

  1. 浏览器是 javaScript 的前端运行环境
  2. Node.js 是 JavaScript 的后端运行环境
  3. Node.js 中无法调用 DOM 和 BOM 等 浏览器内置 API

二、为什么要用node.js

javaScript语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉JavaScript就是个“玩具语言”。无法像其他编程语言一样满足工程的需要。

但是,在Node环境下,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求。

Node.js 适合以下场景:

1、实时性应用,比如在线多人协作工具,网页聊天应用等。

2、以 I/O 为主的高并发应用,比如为客户端提供 API,读取数据库。

3、流式应用,比如客户端经常上传文件。

4、前后端分离。

三、Node.js的下载和安装

1、Node.js下载

英文官网地址为:https://nodejs.org/en/

中文官网地址为:https://nodejs.org/zh-cn

官网会根据你当前的操作系统,提供给你最合适的版本去下载。

2、安装

以windows系统为例:

第一种:(.msi)

​ 下载成功之后是一个msi文件,双击安装即可。安装成功后,相应的环境变量都会自动配置,不需要我们再去手动配置。一路next就可以安装成功。

第二种:(.zip)

​ 下载成功之后是一个zip文件,双击解压即可。安装成功后,相应的环境变量需要手动配置。

3、测试Node.js是否安装成功

安装成功之后,可以在window控制台查看是否安装成功。

输入下面的命令查看node的版本。
node -v

4、使用Node.js运行JavaScript代码

新建一个nodeproject目录,新建一个js文件01_hello.js

var num1 = 10;
var num2 = 20;
console.log(num1 + num2);

在windows控制台中,切换目录到js文件所在目录。然后输入node 01_hello.js

四、node.js 中的npm

1、npm 是什么

npm(即 node package manager )是Node的包管理工具,能解决NodeJS代码部署上的很多问题npm里面有接近60万个别人已经写好的包,到目前为止,npm差不多收集了60万个别人写好的包,其实每个包就是一个功能,一个需求,npm里面有关于创建服务器的包,启动电脑摄像头的包,如果正好我们有这些需求,那么我们就没必要自己去写代码,完全可以用别人已经写好的包

npm是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入

" npm -v " 来测试是否成功安装。

命令如下,出现版本提示表示安装成功:

如果安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

npm install npm -g

2、npm 命令安装模块

官网地址为:https://www.npmjs.com/

npm 的包安装分为本地安装(local)、全局安装(global)两种,

命令如下:

npm install express          //本地安装

npm install express -g      //全局安装

(1)本地安装

  • 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  • 可以通过 require() 来引入本地安装的包。

(2)全局安装

  • 将安装包放在 /usr/local 下或者你 node 的安装目录。
  • 可以直接在命令行里使用。

如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

3、选用 cnpm

1、cnpm 的官方介绍是:cnpm是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。既然都一样,那么cnpm为什么要出现呢?

由于npmjs.org的服务器在国外(即在“墙”外),国(墙)内开发者做项目的时候,很多“包”的下载速度极慢,在这种环境下阿里巴巴为了众多开发者的便捷便挺身而出推出了淘宝镜像(即cnpm),它把npm官方的“包”全部搬到国内,供广大开发者使用。

官网地址为: http://npm.taobao.org

使用淘宝镜像的命令:

npm install -g cnpm --registry=https://registry.npmmirror.com

2、安装cnpm,使用命令 npm install cnpm -g --registry=https://registry.npm.taobao.org 安装完成后用 cnpm -v 查看是否安装成功

3、cnpm的使用方法和npm完全一致,只需要把npm改成cnpm即可

五、Node.js中的一些基本概念澄清

1、Node.js不是JS应用、而是JS运行平台

看到Node.js这个名字,初学者可能会误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而成,是一个Javascript的运行环境。

既然不是Javascript应用,为何叫.js呢?因为Node.js是一个Javascript的运行环境。提到Javascript,大家首先想到的是日常使用的浏览器,现代浏览器包含了各种组件,包括渲染引擎、JavaScript引擎等,其中Javascript引擎负责解释执行网页中的Javascript代码。作为Web前端最重要的语言之一,Javascript一直是前端工程师的专利。不过,Node.js是一个后端的Javascript运行环境(支持的系统包括Linux、Windows),这意味着你可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行,

2、Node.js与JavaScript的关系

JavaScript包括3个部分:ECMAScript-262、BOM、DOM。BOM与浏览器相关,DOM和HTML页面相关。Node.js中只是包括了ECMAScript-262。所以我们以前的一些关于BOM的操作和DOM的操作都是基于浏览器端运行的,在Node.js中是无法使用的。

3、Node.js中几个全局变量

  • global:表示Node所在的全局环境,类似于浏览器的window对象。需要注意的是,如果在浏览器中声明一个全局变量,实际上是声明了一个全局对象的属性,比如var x = 1等同于设置window.x = 1,但是Node不是这样,至少在模块中不是这样(REPL环境的行为与浏览器一致)。在模块文件中,声明var x = 1,该变量不是global对象的属性,global.x等于undefined。这是因为模块的全局变量都是该模块私有的,其他模块无法取到。
  • process:该对象表示Node所处的当前进程,允许开发者与该进程互动。
  • console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。

4、Node.js中的几个全局函数

  • setTimeout():用于在指定毫秒之后,运行回调函数。实际的调用间隔,还取决于系统因素。间隔的毫秒数在1毫秒到2,147,483,647毫秒(约24.8天)之间。如果超过这个范围,会被自动改为1毫秒。该方法返回一个整数,代表这个新建定时器的编号。
  • clearTimeout():用于终止一个setTimeout方法新建的定时器。
  • setInterval():用于每隔一定毫秒调用回调函数。由于系统因素,可能无法保证每次调用之间正好间隔指定的毫秒数,但只会多于这个间隔,而不会少于它。指定的毫秒数必须是1到2,147,483,647(大约24.8天)之间的整数,如果超过这个范围,会被自动改为1毫秒。该方法返回一个整数,代表这个新建定时器的编号。
  • clearInterval():终止一个用setInterval方法新建的定时器。
  • require():用于加载模块。
  • Buffer():用于操作二进制数据。

5、Node.js的核心模块

如果只是在服务器运行JavaScript代码,用处并不大,因为服务器脚本语言已经有很多种了。Node.js的用处在于,它本身还提供了一系列功能模块,与操作系统互动。这些核心的功能模块,不用安装就可以使用,下面是它们的清单。
  • http:提供HTTP服务器功能。
  • url:解析URL。
  • fs:与文件系统交互。
  • querystring:解析URL的查询字符串。
  • child_process:新建子进程。
  • util:提供一系列实用小工具。
  • path:处理文件路径。
  • crypto:提供加密和解密功能,基本上是对OpenSSL的包装。

六、node.js 的模块化

Node应用是由模块组成,遵循的是CommonJS模块规范。

1、CommonJS模块规范及规范化内容

CommonJS 是一套代码规范, 目的是为了构建 JavaScript 在浏览器之外的生态系统 (服务器端, 桌面端).

通过该规范使JavaScript具备开发复杂应用、跨平台的能力

CommonJS模块规范化的内容

(1)导出模块:moudle.exports 导出模块

(2)导入模块:require('模块名称')

2、moudle对象

每个导出的模块都有一个moudle对象,该对象包含的属性有:

  • moudle.exports:表示当前模块对外输出的接口,其他模块引用的是moudle.exports导出的变量 。
  • exports变量:指向moudle.exports,为了操作的方便,它不能直接指向一个值

这等同在每个模块头部,有一行这样的命令。

var exports = module.exports;

3、使用require导入模块

导入并执行一个JavaScript文件,返回的是一个exports对象,若没有找到相应的对象就报错

(1)模块输出是一个函数,则该函数的输出接口不能用exports变量来导出,必须用户moudle.exports导出

(2)加载规则:

A、用来加载js文件,默认的文件扩展名为.js

var foo = require('foo');

//  等同于var foo = require('foo.js');

B、根据参数的不同格式,去不同路径下查找相应的js文件

​ './(../)':表示加载路径是相对路径

​ '/':表示加载路径是绝对路径

​ 既不是'./(../)'也不是'/':表示加载的模式是node的核心模块,在node安装路径的node_modules中

(3)require的内部处理的流程

​ require -->module.exports-->moudle._load

posted @ 2023-06-19 10:50  张Zong在修行  阅读(82)  评论(0编辑  收藏  举报