Node.js简介

Posted _洋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js简介相关的知识,希望对你有一定的参考价值。

文章目录

Node.js简介

基本含义

Node.js是一个能够在服务器端运行javascript开放源代码、是一个跨平台JavaScript运行环境

node.js就是使用javascript编写,并且运行在服务器。
也就是说node.js实现了使用js来开发后端
node.js把js的战场从浏览器转移到服务器,可以进行更多的操作。

用户请求和响应的过程:

产生原因

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对服务器的要求不高,所以不必担心价格问题。

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环境:

node特点总结:

  • 和浏览器相比node.js环境中是没有Dom和Bom的
  • 出于安全问题考虑,浏览器不支持跨域请求和文件读写功能;
    而Node.js没有安全限制可以直接访问到终端提供的很多的API方法:
    • 所以可以直接操作文系统
    • 进行进程管理(解决单线程问题,在node下可以创建多个进程)
    • 可以进行跨域请求

Node.js 简介

Node.js

Node介绍

Node.js简称Node,是一个可以使JavaScript运行在服务器端的开发平台

JavaScript本是一种Web前端语言,Node.js让JavaScript成为服务器端脚本语言

Node.js选择JavaScript作为实现语言的原因

  • JavaScript满足CommonJS标准,符合事件驱动,用户较多且门槛较低;
  • Chrome的V8引擎具有出色的性能。

Node.js将 V8引擎 封装起来,作为服务器运行平台,以执行 JavasScript 编写的后端脚本程序


解释:

  • Node.js运行时环境包含执行JavaScript程序所需的一切条件。该引擎会将JavaScript代码转换为更快的机器码
  • Node.js进一步提升JavaScript的能力,使JavaScript可以访问文件、读取数据库、访问进程,从而胜任后端任务
  • 使用Node.js 的最大优点是开发人员可以在客户端和服务器端编写JavaScript,打通了前后端
  • Node.js发展迅速,目前已成为JavaScript服务器端运行平台的事实标准


解释:

  • Node.js是跨平台的,能运行在Windows、macOS和Linux平台上
  • Node.js除了自己的标准类库之外,还可使用大量的第三方模块系统来实现代码的分享和重用
  • 与其他后端脚本语言不同的是:Node.js 已内置处理网络请求和响应的函数库,也就是自备了HTTP服务器,所以不需要额外部署HTTP服务器。

Node特点

非阻塞I/O: 非阻塞I/O又称异步式I/O,是Node.js的重要特点

  • 非阻塞I/O:是指当线程遇到I/O操作时,不会以阻塞方式等待I/O操作完成或数据返回,而只是将I/O请求转发给操作系统,继续执行下一条指令
  • 阻塞I/O:是指线程在执行过程中遇到I/O操作时,操作系统会撤销该线程的CPU控制权,使其暂停执行,处于等待状态,同时将资源转让给其他线程

事件驱动: 非阻塞I/O与事件驱动密不可分

在事件驱动模型中,会生成一个事件循环线程来监听事件,不断地检查是否有未处理的事件

  • 事件驱动以事件为中心,Node.js将每一个任务都当成事件来处理。Node.js在执行过程中会维护一个事件队列,需执行的每个任务都会加入事件队列并提供一个包含处理结果的回调函数
  • Node.js的异步机制是基于事件的,所有磁盘I/O、网络通信、数据库查询事件都以非阻塞的方式请求,返回的结果由事件循环线程来处理

单线程

Node.js的应用程序是单进程、单线程的,但是通过事件回调支持并发,性能变得非常高。

在阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须使用多线程。

在非阻塞模式下,线程不会被I/O操作阻塞,该线程所使用的CPU核心利用率永远是100%,I/O操作以事件的方式通知操作系统。

Node.js在主线程中维护一个事件队列,当接收到请求后,就将该请求作为一个事件放入该队列中,然后继续接收其他请求。

Node.js内部通过线程池来完成非阻塞I/O操作,Node.js的单线程是指对JavaScript层面的任务处理是单线程的,而Node.js本身是一个多线程平台

总结:

  • Node.js采用非阻塞I/O事件驱动相结合的编程模式,与传统同步I/O线性编程思维有很大的不同
  • Node.js程序的控制很大程度要依靠事件回调函数,这不符合开发人员的常规线性思路,需要将一个完整的逻辑拆分为若干单元(事件),从而增加了开发和调试的难度

Node使用场合

适合用Node.js的场合:

  • REST API:REST API是一种前后端分离的应用程序架构。
  • 单页Web应用:加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序。
  • 统一Web应用的UI层:Node.js是面向服务的架构,其能够更好地实现前后端的依赖分离,可以将所有的关键业务逻辑都封装成REST API,UI层只需要考虑如何用这些API构建具体的应用。
  • 准实时系统:如聊天系统、微博系统、博客系统的准实时社交系统,特点是轻量级、高流量,没有复杂的计算逻辑。
  • 游戏服务器:程序员不必使用C语言就能开发游戏的服务器程序。
  • 微服务架构:Node.js也可用于实现基于微服务架构的应用。

不适合用Node.js的场合:

  • 数据加密和解密
  • 数据压缩和解压
  • 模板渲染

Node组成

  • JavaScript 由三部分组成,ECMAScript,DOM,BOM
  • Node.js是由 ECMAScriptNode环境 提供的一些 附加API 组成的,包括文件、网络、路径等等一些更加强大的 API

构建Node程序

构建第一个Node.js应用程序

//1、导入Node的http模块(内置的http服务器模块)
const http = require('http');

//2、创建http服务器 req:request 客户端请求对象,用于向服务端发送请求
//              res:response 服务端响应对象,用于向客户端发送相应信息

const htttpServer = http.createServer(function (req,res) {
    //设置响应头信息:200是状态码:表示请求-响应成功 Content-Type:是响应信息的格式
    res.writeHead(200,{'Content-Type':'text/plain'});
    //2、向客户端发送字符串
    res.end('Hello Word');
})

//3、注册监听
htttpServer.listen(8080,function (){
    console.log(('服务器在8080端口监听'))
})


注意:在终端用 node 程序文件名 启动的方式,注意路径是否为当前目录,确保可以找到相应js文件

注意:在终端使用 npm管理器 启动 需要在package.json文件下的"scripts"中 添加 "start" : "{node ./src/server.js }" 并使用 npm start 来启动

以上是关于Node.js简介的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 简介

Node.js简介

Node.js简介以及环境配置

Node.js 入门简介

Node.js简介

Node.js的简介和安装