Skip to content

node是什么:

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

  • node应用场景:

Web服务API,比如RESTful API(本身没有太多的逻辑,只需要请求API,组织数据进行返回即可) 服务器渲染页面,提升速度 后端的 Web 服务,例如跨域、服务器端的请求

  • 浏览器端的 JS 由三部分组成:
  1. ECMAScript:定义了JavaScript语言的基本语法,它是JavaScript的核心。

  2. DOM:文档对象模型,用于操作网页中的内容。

  3. BOM:浏览器对象模型,用于操作浏览器窗口。

  • Node端的 JS:
  1. 没有 BOM,因为服务器不需要

  2. 没有 DOM,因为没有浏览器窗口,也就没有文档对象模型

  3. 几乎包含了所有的 ES 规范

  4. 没有 window 对象,取而代之的是一个叫 global 的全局变量

  5. 在 Node 中禁止函数的 this 指向 global,所以执行 console.log(this) 的结果为 {}

commonJS是什么?

CommonJS是一种JavaScript模块化规范,用于定义 JavaScript 的模块化编程。

  • commonJS的性质是什么?

它以同步的方式加载模块,使用 require() 函数加载模块,通过 module.exports 或 exports 对外暴露接口。

  • commonJS有什么用?

它实现了模块的加载机制,使编写的代码可以复用,减少了重复劳动。

  • commonJS属于什么技术栈?

CommonJS是Node.js服务端技术栈中的重要一环,它增强了Node.js的模块化能力,让Node.js在服务端发挥出更大的作用。

  • module.exports是什么?

module.exports是CommonJS模块化规范中的一个重要特性。

  • module.exports的性质是什么?

它的性质是一个对象,用来导出模块的接口,有助于模块的复用和重复利用。

  • module.exports有什么用?

module.exports的用途是将模块内定义的方法和变量导出,从而让其他文件可以使用。

  • module.exports属于什么技术栈?

它属于Node.js服务端技术栈中的重要一环,增强了Node.js的模块化能力,让Node.js在服务端发挥出更大的作用。

package 包:

Node.js 的包基本遵循 CommonJS 规范,包将一组相关的模块组合在一起,形成一组完整的工具。 包由包结构和包描述文件两个部分组成。

  • 包结构:

用于组织包中的各种文件

  • 包描述文件:

描述包的相关信息,以供外部读取分析, 包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件:package.json

NPM 是什么:

全称:Node Package Manager,Node 的包管理器。

  • NPM 与 Node 的关系:

安装 node 后自动安装 npm(npm是node官方出的包管理器,专门用于管理包)

  • NPM 能干什么:

通过 NPM 可以对 Node 的包进行搜索、下载、安装、删除、上传。

  • Yarn:

Yarn发布于2016年10月,截至当前2019年1月,gitHub上的Start数量为:34.3k,已经超过npm很多了, yarn使用本地缓存,有时甚至无需互联网连接就能安装本地已经缓存过的依赖项。

Node 中的 fs 文件系统:

在 Node 中有一个文件系统,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。 在 NodeJs 中,给我们提供了一个模块,叫做fs模块(文件系统),专门用于操作文件。 fs模块是 Node 的核心模块,使用的时候,无需下载,直接引入。

数据库是什么:

数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。

1.3 数据库的分类

1.3.1 关系型数据库(RDBS):

  • 代表有:

MySQL、Oracle、DB2、SQL Server...

  • 特点:

关系紧密,表结构

  • 优点:

易于维护:都是使用表结构,格式一致; 使用方便:SQL 结构化查询通用,可用于复杂查询; 高级查询:可用于一个表以及多个表之间非常复杂的查询。

  • 缺点:

读写性能比较差,尤其是海量数据的高效率读写; 有固定的表结构,字段不可随意更改,灵活度稍欠; 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

1.3.2 非关系型数据库(NoSQL):

  • 代表有:

MongoDB、Redis...

  • 特点:

关系不紧密,文档存储,有键值对

  • 优点:

格式灵活:存储数据的格式可以是key,value形式。 速度快:nosql可以内存作为载体,而关系型数据库只能使用硬盘; 易用:nosql数据库部署简单。

  • 缺点:

不支持sql,学习和使用成本较高; 不支持事务; 复杂查询时语句过于繁琐。

MongoDB 简介:

MongoDB 是为 快速开发互联网 Web 应用而设计的数据库系统。 MongoDB 的设计目标是极简、灵活、作为Web应用栈的一部分。 MongoDB 的数据模型是面向文档的,所谓文档是一种类似于 JSON 的结构,简单理解 MongoDB 这个数据库中存的是各种各样的JSON。(BSON) MongoDB 图形化工具: Studio 3T Navicat

  • MongoDB 原生 CRUD(增删改查):

Mongoose:

Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。

  • Buffer 缓冲器:

Node.js技术栈:

  1. Node.js:是一个基于Chrome V8引擎的JavaScript运行环境,使用事件驱动、非阻塞式I/O的模型,为JavaScript脚本设计的平台。

  2. Express:是一个基于Node.js开发的Web应用开发框架。它提供了一系列强大的特性,例如路由、模板引擎、数据库抽象层等,帮助开发者更方便地完成各种Web应用。

  3. MongoDB:是一个专为Web应用准备的NoSQL数据库。它提供了一系列强大的功能,例如文档存储、查询、聚合、复制等,帮助开发者更快地完成各种Web应用。

  4. Socket.io:是一个基于Node.js的实时应用框架,通过使用Websocket技术,可以实现服务器端与客户端的即时通信。

Node项目的目录结构及功能-1:

  1. bin:用来存放可执行文件,例如www(应用服务器入口文件)、npm(npm命令)等。

  2. config:用来存放应用的配置文件,例如database.js(数据库连接配置文件)、routes.js(路由配置文件)等。

  3. lib:存放应用的公共模块文件,例如logger.js(日志模块文件)、utils.js(工具模块文件)等。

  4. public:存放静态资源文件,例如html、css、js、images等。

  5. routes:用来存放路由文件,例如index.js(首页路由)、user.js(用户路由)等。

  6. views:用来存放模板文件,例如index.ejs(首页模板)、user.ejs(用户模板)等。

  7. models:存放数据模型文件,用于操作数据库。

  8. app.js:应用的入口文件,用来加载所有的配置文件和模块文件,并启动应用服务器。

  9. package.json:存放开发项目的信息,例如项目名称、版本号、作者、描述等,以及依赖的Node模块列表等。

Node.js中的模块主要包括:

  1. HTTP模块:用于创建服务器和对HTTP请求和响应进行处理。

  2. File System模块:用于读取文件和目录,创建文件和目录,修改文件和目录的权限,移动文件和目录,删除文件和目录等。

  3. Path模块:用于解析文件路径和转换文件路径。

  4. Stream模块:用于创建流对象,并对数据流进行操作。

  5. Net模块:用于创建TCP/IP客户端和服务器程序。

  6. DNS模块:用于解析域名。

  7. Child Processes模块:用于创建子进程。

  8. Events模块:用于监听和触发事件。

  9. Crypto模块:用于加密和解密数据。

  10. Buffer模块:用于处理二进制数据。

Node项目的目录结构及功能-2:

  1. bin:存放可执行文件,用于启动应用服务器。

  2. config:项目的配置文件,包括数据库连接配置、第三方接口配置等。

  3. lib:存放项目的核心代码文件,包括路由文件、控制器文件等。

  4. models:存放数据模型文件,用于操作数据库。

  5. public:存放静态资源文件,包括css、js、图片等。

  6. routes:存放路由文件,用于处理HTTP请求。

  7. views:存放显示页面文件,一般是html文件。

  8. app.js:应用的入口文件,用来加载所有的配置文件和模块文件,并启动应用服务器。

  9. package.json:存放开发项目的信息,例如项目名称、版本号、作者、描述等,以及依赖的Node模块列表等。