node概念
-
node是什么
开发环境/程序,运行在服务端的js,前端程序员可以不用学习其他后台语言如PHP,Ruby。
-
node特点
V8引擎,目前最快的JS引擎。单线程、异步I/O、事件驱动式的程序设计模式(性能提升,减少多程序设计的复杂性,提高开发效率。)(占内存空间小,运行速度快)
对比前台js(运行在游览器)/后台(在node里执行)
因为后台js,数据不互通,需要把其他js中的文件拿过来。require() // exprots()
-
node能干什么:
除了能辅助大前端开发,还能编写web应用、封装API、组织RPC服务、甚至可以开发VSCode编辑器一样的PC客户端。
node.js周边生态环境也非常强大,NPM上有超过60个模块。
和其他技术相比,Node.js 性能好,部署容易,能够轻松处理高并发场景下的大量服务器请求。
模块与包
-
什么是模块
(模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。)
-
什么是包
(把多个模块放在一个文件夹中,这些模块相互之间有关系,最终提供一个相对完整的文件夹,这个文件夹称为包,在项目中引入这个文件夹就可以了。真正使用的还是包里边的模块,模块与包的概念就是混着说。)
node本身的基础语法,无法完成一个具体的功能,都是以包(模块)的方式提供。// node中包的来源:(1)内置在node程序中:可以实现所有的node功能--原生模块;(2)第三方包:对原生包的封装--下载--常用的/不常用的
-
如何制作一个模块
-
如何制作一个包
-
如何使用模块或者包
require() 来引入本地安装的包。 var http = require("http");
require(路径:完整路径,如./index.js): (1)./index.js ---当做文件路径,根据路径查找文件。(2)index.js -- 假设是系统提供的模块(包)程序安装目录下的mode_modules文件夹下找;--假设是。。 。
-
常用的系统 包
(1)fs 文件读写; (2)http 处理事件; (3)url :解析url; (4)util 提供一些常用的函数; (5)path 提供路径的小工具;
-
常用的第三方包
(1)express (官方第三方包):完全封装了http模块实现处理请求的。
(2)koa :与express作用完全一样,也是官方第三方包。
(3)body-parser : 处理post请求发送的数据。 (4)monogoose : 实现链接mongoDB数据库。 (5)ejs与art-template(与express-art-template同时使用):都是实现模板渲染页面的包。
-
模块的加载顺序问题
用 require 指令来载入 Node.js 模块。然后读package.json里指定的js文件。
-
NPM程序的使用
使用包管理工具NPM下载 npm网站上的包--第三方包(个人的 // 组织/公司发的:功能完备,使用方便。下载符合要求的,参照文档开发。使用node开发,只要能够想到的功能,几乎都能在npm上找到,短暂的学习即可使用(复制粘贴)
$ npm install express,下载了express模块, 引用var express = require('express');); $ npm uninstall express:卸载模块;;; $ npm update express:更新模块;;; $ npm search express:搜索模块;;; $ npm publish:发布模块;;;
node核心功能
-
全局对象与函数
-
对比window与global
global 最根本的作用是作为全局变量的宿主;(有window,执行在前台)
console.log(__dirname);//文件所在文件夹的路径console.log(__filename);//当前执行文件的路径
-
node中的全局变量
在最外层定义的变量;全局对象的属性; 隐式定义的变量(未定义直接赋值的变量)。
-
node中的全局函数
-
-
内置模块(包)
-
文件模块
var fs = require("fs");
异步:fs.readFile(path, options, function(args) {//(文件路径,编码方式,回调函数) // body });
同步:fs.readFileSync(path, options);
编码方式:默认读文件的方式是二进制--拿到的data不能直接编译成文字。 一般读其他文件:图片/音频/视频/,二进制。读文字类:“utf8“,直接读到文字。没用”utf8“, 给.toString()
写:fs.writeFile(path,data,options,callback){//路径,数据,参数,回调函数 }; "flag:a";追加
-
事件模块
-
内置对象Buffer类
用来创建一个专门存放二进制数据的缓存区...Buffer 类是随 Node 内核一起发布的核心库。带来一种存储原始数据的方法,让 Node.js 处理二进制数据,当要在 Node.js 中处理I/O操作中移动的数据时,就可能使用 Buffer 库。存储在 Buffer 类的实例中。 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。(堆外内存)
-
流概念
流是数据的集合(与数据、字符串类似),但流的数据不能一次性获取到,也不会全部load到内存中,因此流非常适合大数据处理以及断断续续返回chunk的外部源。流的生产者与消费者之间的速度通常是不一致的,因此需要buffer来暂存一些数据。
Stream 是一个抽象接口,所有的 Stream 对象都是 EventEmitter 的实例。 写入流、管道流、链式流、
-
// 创建可读流var readerStream =fs.createReadStream('input.txt'); // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream('output.txt');
管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。
链式是通过连接输出流到另外一个流并创建多个对个流操作链的机制。链式流一般用于管道操作。
node服务器
页面中的所有请求:href=""; src=""; url(""); 都是请求页面 网页请求时 会把相对url转化为绝对url--再请求服务器。他们的url只会包括pathname部分。
action="http://127.0.0.1:8080" 表单一般是为了向服务器发送数据。全部都是同步方式,发送请求,整个页面会等待上一个请求完成--加载下一个
MongoDB数据库
前端补充
-
正则表达式
-
ajax技术
ajax: 异步aysc javascript and xhtml(json 对象/字符串)---往服务器发送数据
特点:(1) 向后台发送数据; (2) 异步,无刷新; (3)拿服务器给我发送数据
发送过程:游览器 >>> ajax(请求的地址+请求方式+请求的数据) >>> 服务 >>>> 数据(json)ajax(处理数据) >>> 游览器
KOA框架
-
node与KOA的关系就跟 JavaScript与jQuery的关系是一样的。
-
由于在node环境下写原生的JavaScript实现功能比较麻烦,所以从一开始使用node开发都会用到框架实现。
-
node的框架最流行的是Express与KOA,这两个框架实现功能一样,在设计思路上有些差异,但总的来说没有多大差别。
-
路由问题
-
数据处理问题
-
-
koa是基于Node.js的http框架,由express原班人马打造。是下一代的HTTP框架。更简洁,更高效。(高性能、简洁)。
-
核心流程:
koa的源码有四个文件:,,,,
在每个请求的生命周期中,两件比较核心的事情。1.将多个中间件组合。2.创建ctx对象。 (ctx包含了req和res,也就是每个中间件的对象都可以处理请求和响应。这样,一次http请求,接连经过各个中间件的处理,在到返回给客户端,就完成了一次完美的请求)。
-
context: Koa封装的带有一些和请求与响应相关的方法和属性.
require: Koa封装的req对象,比如提供了原生没有的host属性。
response: Koa封装的res对象,对返回的body hook了getter和setter.
-
Koa中间件机制
参数:(1)ctx:在请求进来的时候会创建一个给中间件处理请求和响应的对象(如读取请求头和设置响应头)。 (2)next:被包装过的下一个中间件(第一个中间件执行next的时候将执行权限给了第二个中间件)。
-
中间件的类型:
(1)common function:普通函数,需要返回一个promise.
(2)generator function:需要被co包裹一下,就会返回一个promise.(3)async function: 直接使用,会直接返回promise.
-