nodejs

204 阅读5分钟

nodejs

什么是nodejs

nodejs 是一个基于Chrome V8引擎的 JavaScript运行环境

nodejs 使用了一个事件驱动 非阻塞式I/O的模型 使其轻量又高效

简单来说 nodejs 就是运行在服务端的JavaScript 利用JavaScript在服务端进行变成

nodejs 是一个让JavaScript运行在服务端的开发平台 它让JavaScript的触角伸到了服务器端 可以与php jsp python ruby 平起平坐

nodejs不是一种独立的语言 与php jsp Python perl ruby的即是语言 也是平台不同 nodejs使用javascript进行编程 运行在javascript引擎上

nodejs开发的构成 利用npm开发的社区提供的大量的第三方包加上基本的ECMAScript脚本语言以及node平台提供的一系列编程接口进行编程

javascript语言与node

javascript 语言本身是指ECMASript 语言本身不包括BOM DOM

BOM DOM 是浏览器环境给javascript提供的变成接口对象 理论上DOM window 都属于BOM

浏览器都有引擎 最少两个 一个是渲染引擎 一个是javascript解析执行引擎

Chrome V8引擎就是专门用来解析和执行javascript代码的

在所有浏览器中 Google chrome 的V8引擎是最快的js脚本代码解析执行引擎 性能非常好

以前的javascript就是只能在浏览器运行 包括ECMAScript 和 BOM浏览器的东西

node 不是一门新语言 他只是把chrome V8 引擎移植到自己的环境当中 在这个环境之上构建了一系列的底层API 给ECMAScript提供了一些特定环境的编程接口

nodejs 没有BOM DOM

nodejs的特点

nodejs 是一个平台 或者说是一个运行环境

nodejs是一个基于chrome javascript运行时建立的一个平调 具体是基于chromeV8引擎 V8引擎执行javascript的速度非常快 性能非常好

nodejs 旨在提供一种简单的构建 快速、可伸缩网络程序的方法

使用事件驱动 非阻塞IO模型

轻量 可伸缩 适用于实时数据密集的交互应用

单进程 单线程

nodejs 可以做什么

javascript解析器只是javascript代码运行的一种环境,浏览器是javascript运行的一种环境,浏览器为javascript提供了操作DOM对象和window对象等的接口 nodejs也是javascript运行的一种环境 nodejs为javascript提供了操作文件 创建HTTP服务 创建TCP/UDP服务等的接口 所以nodejs可以完成其他后台语言(python php)能完成的工作

1 Web开发:Express + EJS + Mongoose/MySQL

express是轻量灵活的nodejs Web应用框架 它可以快速地搭建网站 Express框架建立在Nodejs内置的Http模块上 并对Http模块再包装 从而实际Web请求处理的功能

ejs是一个嵌入的javascript模块引擎 通过编译生成HTML的代码

mongoose是MongoDB的对象模型工具 通过Mongoose框架 可以进行访问MongoDB的操作

mysql是连接MySQL数据库的通信API 可以进行访问MySQL的操作

通常用Nodejs做Web开发 需要3个框架配合使用 就像Java中的SSH

2 Web聊天室(IM): Express + Socket.io

socket.io是一个基于Nodejs架构体系的 支持websocket的协议用于实时通信的一个软件包

socket.io 给跨浏览器构建实时应用提供了完整的封装 socket.io完全由javascript实现

3 Web爬虫: Cheerio/Request

cheerio是一个为服务器特别定制的 快速 灵活 封装jQuery核心功能工具包 Cheerio包括了jQuery核心的子集 从jQuery库中去除除了所有DOM不一致性和浏览器不兼容的部分 揭示了它真正优雅的API Cheerio工作在一个非常简单 一致DOm模型之上 解析 操作 渲染都变得难以置信的高效 基础的端到端的基准测试显示Cheerio大约比JSDOM快八倍 Cheerio封装了@Fb55兼容的htmlparser 几乎能够解析任何的HTML和XML document

4 REST开发 Restify

restify是一个基于Nodejs的REST应用框架 支持服务端和客户端 restify比起express更专注于REST服务 去掉了express中的template render等功能 同时强化了REST协议使用 版本化支持 HTTP的异常处理

5 Web 博客 Hexo

Hexo是一个简单的 轻量的 基于Node的一个静态博客框架 通过Hexo我们可以快速创建自己的博客 仅需要几条命令就可以完成

nodejs 回调函数

nodejs是一个基于ChromeV8引擎的JavaScript运行环境 它使得JavaScript可以脱离浏览器运行在服务器端 nodejs的核心特性之一是其非阻塞I/O模型 这使得nodejs非常适合处理高并发的网络应用 nodejs一步变成呢过的直接体现就是回调

在nodejs 中 回调函数是一种异步编程模式 用于IO操作 如文件读写 数据库交互 网络请求等 这些操作通常需要花费较长时间 如果采用同步方式 会阻塞蒸个程序的执行 知道操作完成

使用回调函数 nodejs可以在IO操作进行时继续执行其他代码 一旦IO操作完成 再执行回调 nodejs 是单线程的 但通过事件驱动和回调机制实现异步操作

使用场景

  • 读取文件 写入文件等IO操作
  • 处理网络请求
  • 数据库查询

阻塞是按顺序执行的 而非阻塞是不需要按顺序的 所以如果需要处理回调函数的参数 我们就需要卸载回调函数内

回调地狱 Callback Hell

当多个异步操作需要按顺序执行时 回调函数会导致代码嵌套 使得代码难以阅读和维护

为了改善代码的可读性和可维护性 可以使用一下方法

  • Promises: Promises是一种新的异步编程模式 它允许你以链式的方式处理异步操作 避免了回调地狱
  • async/await: