Node.js简介

基本含义

Node.js是一个能够在服务器端运行JavaScript开放源代码、是一个跨平台JavaScript运行环境
node.js就是使用javascript编写,并且运行在服务器,也就是说node.js实现了使用js来开发后端

用户请求和响应的过程:

在这里插入图片描述

  • 我们常说的js就是运行在浏览器的javascript
  • nodejs就是运行在服务器的javascript

产生原因

Node.js的产生原因要追溯到服务器的阻塞问题:

传统服务器每次产生一个请求,就对应着一个线程。
那么就有一个问题:请求的速度由用户决定,响应的速度也可以通过提升带宽等方法比较容易的提升速度。但是I/O的输入输出速度是比较难提升的。而每一个请求就会产生一个线程,数据请求又比较慢就会出现有很多线程再缓存中等待,就会造成大量的内存浪费。所以使用Node.js编写的服务器采用单线程模式,即不管产生多少请求就只有一个线程,这样就可以节省空间,大大降低了成本。

我们常说JS是单线程的,这也与它运行在nodejs上的有关。

nodejs特点

  • Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步模型等技术来提高性能,可优化应用程序的传输量和规模。

    Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的js解释部分,但是Ryan Dahl鬼才般地,把这个V8搬到了服务器上,用于做服务器的软件。

  • Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。Node出现之后,JS可以作为服务端语言使用,运行在服务器。

  • Node.js的单线程是Node.js的一个最大的优点,但是同时也是它的缺点。
    因为毕竟是单线程,如果请求太多会处理不过来的,所以我们一般情况下采用分布式的方法来弥补这个缺点。分布式是指采取多个服务器,node.js对服务器的要求不高,所以不必担心价格问题。(同时也可以使用cluster模块,使Node.js变成多线程。)

nodejs的用途

nodejs编写的就是服务器,所以服务器有的作用它都有,如:

  • Web服务API,比如REST
  • 实时多人游戏
  • 后端的Web服务,例如跨域、服务器端的请求
  • 基于Web的应用
  • 多客户端的通信,如即时通信
  • 作为底层开发工具:
    `node.js => webpack=> vue,recat脚手架开发方式

node.js的基本使用

node环境搭建

官网:https://nodejs.org/en/
中文官网:http://nodejs.cn/download/
以官网为例:
在这里插入图片描述
点击下载:
下载完有一个.msi文件,双击进行安装即可。
在这里插入图片描述
如果安装.msi文件出现问题可以尝试在终端输入:
msiexec /package +msi文件路径+文件名.msi

查看node是否安装完成:
在任意文件夹目录按住shift键同时点击右键,出现了在此处打开PowerShell说明安装成功。
在这里插入图片描述
在这里插入图片描述也可以cmd在终端直接输入node,进行验证
在这里插入图片描述

node编写

终端编写

配置完成环境变量之后再终端输入node,就进入了node的编写:
在这里插入图片描述

js文件编写

node.js的第二种运行方式:

  • 编写.js文件
  • 在终端cd到文件的路径文件夹下
    (也可以再文件的目录中输入cmd,回车,就可以快速进入对应位置的命令行:
    在这里插入图片描述

)

  • 输入 node 文件名,就可以运行相应的node代码了
    eg:
    hello.js
console.log("hello")
var a =123
var b =456
console.log(a+b)

在这里插入图片描述

在Vscode上使用node.js运行js代码

法一:终端运行
打开Vscode的终端
在终端输入:node 文件路径\文件名
在这里插入图片描述

法二:右键Run Code
右键Run Code即可运行代码

nodejs环境和浏览器环境的区别

  • 浏览器环境:
    在这里插入图片描述
  • Node环境:
    在这里插入图片描述

nodeJS和传统JS的对比

  • 和浏览器相比node.js环境中是没有DOM和BOM的

  • 引入了一些服务端特性

    • 可以直接操作文件系统:出于安全问题考虑,浏览器的JS不支持文件读写功能,而Node.js没有安全限制可以直接操作文系统(fs模块),读写文件。
    • 网络编程环境:Node.js有net、http等模块,用于实现底层的网络通信。在浏览器环境下这些通常是浏览器完成的
    • 二进制数据处理:浏览器环境下的JavaScript对二进制数据处理能力相对较弱,Node.js引入了Buffer模块,提供更好的二进制数据处理能力。
    • C/C++ 插件: Node.js有“addons”功能,可以通过C/C++扩展和链接到其他的C/C++库,利用本地库的性能进行操作
    • 高性能服务器:由于Node.js的事件驱动和非阻塞I/O特性,可以构建高性能的服务器,这是浏览器端的JavaScript无法实现的。
    • 进程控制:Node.js可以通过执行本地系统命令来控制操作系统的进程,浏览器环境的JavaScript由于安全限制不能这样做。同时Node.js可以开启子进程,并与子进程进行简单的通信。
    • 可以进行跨域请求:浏览器不支持跨域,可以将浏览器js打包在nodejs环境下运行,解决跨域问题
  • 模块化编程:Node.js支持使用CommonJS进行模块化编程,这使得后端代码更加整洁清晰(CommonJS语法是专门为JS服务端环境提供的语法)。虽然现代的浏览器也开始支持ES6模块,但在历史上这一直是一个差异之处,在ES5及其之前的JavaScript版本中,并没有原生的模块系统。

    模块化是指js文件可以进行导入导出。模块化可以将程序代码分成一个个较小地相对独立的单元(模块),每个模块都有特定的功能,并且可以被其他模块引用。模块化编程可以提高代码的可读性、可维护性、重用性。
    eg:(使用的是ES6模块的语法)
    myModule.js

    export function myFunction() {
      return 'Hello, world!';
    }
    

    anotherModule.js

    import { myFunction } from './myModule';
    console.log(myFunction());
    

    这就是模块化编程。

    commonJs模块和ES6模块的区别:

    • 导入导出模块的方式不同:CommonJS使用require(导入)和module.exports/exports(导出),而ES6模块使用import(导入)和export(导出)。
    • 加载机制不同:CommonJS模块是在运行时加载,而ES6模块是在编译时就解析完成依赖关系
    • 兼容性:由于Node.js的广泛应用,CommonJS模块兼容性相对较好,但需要使用工具如WebpackBabel进行打包构建才能应用在浏览器端。ES6模块对于新版浏览器兼容性较好,旧版浏览器则需要借助Babel进行转译。
    • 引用不同:CommonJS模块导出module.exports的值实际上是一个值的拷贝,就算原对象改变,导出的值不会改变;import得到的是一个值的引用,原对象改变,导出的值也会改变。
    • 使用场景:ES6模块可以在html文件中使用<script>标签引用,但是需要添加type = module属性,这会告诉浏览器你的脚本是一个JavaScript模块,而非一个传统的全局作用域的脚本,type="module"的脚本默认采用异步加载(相当于在<script>标签上加了一个async属性)。

    模块的异步加载和同步加载:https://blog.csdn.net/mantou_riji/article/details/137072904

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐