nodejs的理解

nodejs的由来?javascript

Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。css

 

优势html

借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务垂手可得前端

 

请先下载源文件,一边操做一遍执行。地址:https://github.com/yb81312043/node-summaryjava

 

事件驱动机制(单线程多进程)node

node 事件驱动.jsmysql

看输出不是1,2,3。缘由是代码通过2的时候把事件丢进事件队列中,等待1s后回调输出2,并不影响3的执行输出。git

其余的架构是多线程模型,也就是为每一个业务逻辑提供一个系统线程,经过系统线程切换来弥补同步式 I/O 调用时的时间开销。es6

Node.js 使用的是单线程模型,对于全部 I/O 都采用异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程当中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每一个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。github

 

学习

若是有模块找不到,可使用npm install 模块名 安装

使用node启动js文件

node 1.js

执行了一下js,输出

 

认识一下基本的模块

http

node http.js

http.createServer启动一个服务。req是request请求体,res是response响应体。

node http1.js 

new http.Server()也能够建立一个服务,request表示服务端收到请求,connection表明创建了链接,close表明关闭服务

node http2.js

服务端发送了一个请求,能够看到返回页面信息,能够利用在数据抓取上

node httpRouter.js

实现简单得路由

还有不少事件:

http.IncomingMessage http请求信息

http.ServerResponse  客户端响应得信息

http.get 是http.request得简化版

...

http模块是C++语言开发得node基础模块,效率很是高,构建也很是简单

 

url

node url.js

对应三个方法:

url.parse解析url

urk.formatzu组装url

url.resolve拼合url

utl模块其实就是封装了一些简化url操做得方法

 

querystring

node  querystring.js

对应四个方法:

querystring.parse  解析请求参数

querystring.stringify  格式化成字符串

querystring.escape  对请求字符串进行编码

querystring.unescape  对编码字符串进行解码

querystring模块是封装了一些简化参数解析得方法

 

mysql

node mysql.js

简单得链接数据库,sql操做数据

 

crypto

node  crypto.js

在这个数据增加惊人得互联网时代,网络安全问题层出不穷。crypto是node核心模块之一,提供安全相关的功能。

 

path

node path.js

path模块用于处理文件与目录的路径,还有不少方法我没有写,用到路径方面的本身去查api

 

fs

node fs,js

访问:http://127.0.0.1:8080/http.jshttp://127.0.0.1:8080/1.js访问相对应的文件

node fsReadFile.js

使用fs.readFile读取文件,能够看到读出的数据事buffer格式.

node fsWriteFile.js

使用fs.fsWriteFile写入文件

node fsPipe.js

使用pipe()一边接入输入流,一边接入输出流,实现管道传输。

fs还有不少对应的方法:

fs.open 打卡文件
fs.mkdir 建立目录
fs.readdir 读取目录
fs.exists 查看文件是否存在

...

使用fs模块操做文件系统的api

 

zlib

node zlib.js 

开启gzip压缩,网站反应速递提高不少。

 

events

node events.js

on() 监听,emit()触发,跟jq的绑定事件差很少

node eventsOne.js

once绑定一次监听事件

还有更多的事件操做方法:

emitter.addListener emitter.on别名

emitter.eventNames 返回监听的事件名数组

emitter.getMaxListeners  当前监听器最大限制数值

...

events模块管理全部的异步 I/O 操做的事件队列

 

缓冲区

buffer

node buffer.js

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。Buffer 类,该类用来建立一个专门存放二进制数据的缓存区。一个 Buffer 相似于一个整数数组,但它对应于 V8 堆内存以外的一块原始内存。

Buffer对象占用的内存空间是不计算在Node.js进程内存空间限制上的,所以,咱们也经常会使用Buffer来存储须要占用大量内存的数据:

 

koa的核心代码

promise

在JavaScript的世界中,全部代码都是单线程执行的。因为这个“缺陷”,致使JavaScript的全部网络操做,浏览器事件,都必须是异步执行。异步执行能够用回调函数实现:

node callBack.js 

pomise是es6中统一规范,须要浏览器直接支持

node pomise1.js

resolve表示成功触发then回调函数,reject表示失败触发catch回调函数

node pomise2.js

串行的pomise方式解决了异步回调嵌套的问题

node pomiseAll.js

all简化了连续.then,最后得到的results是resolve返回值的集合

pomise简化了异步回调多层嵌套的问题,使代码变得很清晰

 

generator

node generator.js

generator是es6的新特性,经过yield关键字,可让函数的执行流挂起

next方法会执行函数体,直到遇到第一个yield语句,而后挂起函数执行,等待后续调用。可是next会返回一个对象,这个对象有2个key,value表示yield语句后面的表达式的值,done是个布尔值,表示函数体是否已经执行结束。再次调用g。next时,执行流在挂起的地方继续执行,直到遇到第2个yield,依次类推。

 

promise+generator

node koa原理.js

如今asysc替换generator函数得*,await替换了yield

 

中间件

中间件得做用是在请求处理以前一层过滤,集中处理很是得方便

cookie-parser

node cookieParser.js

cookie-parser模块是对cookie得解析

 

咱们本身写个中间件

node customConnect.js

在响应头中统一添加header

 

经常使用得中间件

body-parser  POSTPUTPATCH三种请求方法中包含请求体,body-parser是一个HTTP请求体解析中间件

static  静态文件服务器 

limit  帮助过滤巨型请求 

query  GET请求解析

logger  日志中间件,能够定制日志

favicon  网站小图标

...

 

node环境中得变量有哪些?

node global.js

node环境中有个global对象,相似与浏览器环境下得windows对象。像env一些默认得

剩下得全局变量方法:http://www.javashuo.com/article/p-qsmdamsk-be.html

 

框架推荐

thinkjs3.0

优势:thinkjs致力于集成项目最佳实践,规范项目让企业级团队开发变得更加简单,更加高效。底层基于 koa 2.x 实现,兼容 koa 的全部功能。该框架借鉴了不少 ThinkPHP 的特性,同时结合Node.js的特性,使用了 ES6 Promise,让异步编程更加简单、方便。

thinkjs官网:https://thinkjs.org/ 

快速安装:https://thinkjs.org/zh-cn/doc/3.0/create_project.html

了解一下cli生成得项目结构:

src>>config>>adapter.js 这个文件是整个项目得配置文件

 

写一个简单得接口试试

src>>config>>controller是整个项目得控制器文件

项目重启一下,chrome访问一下

这就是一个简单得接口啦

 

模板语言ejs

配置一下ejs:https://thinkjs.org/zh-cn/doc/3.0/adapter.html

使用assign像页面输出模板变量,使用display返回html页面

建立页面文件,使用ejs输出返回变量

访问页面:

跟其余模板语言大同小异,学习一下:http://www.javashuo.com/article/p-caxqkcwz-q.html

 

链接数据库

在adapter.js里面配置mysql:https://thinkjs.org/zh-cn/doc/3.0/relation_model.html

链接上数据库后写一个简单得接口

访问一下

能够看到,要是异步事件同步操做得话须要async/await配合使用

 

总结:

nodejs优势:高并发(最大优势),适合I/O密集型应用。

nodejs缺点:可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

    缘由:单进程,单线程

    解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

           只支持单核CPU,不能充分利用CPU,不适合CPU密集型应用

nodejs跟其余后台语言,也就是说其余语言能作的事情nodejs也能干,只是干得效率得问题,是否是适当得问题而已。

nodejs对前端来讲是友好得,语言就是js,因此学习起来比较容易,入门也至关得快。

如今nodejs是前端得基石,可能在人们生活中得使用仍是比较少,可是了解服务端对前端得发展也很是有意义。

 

学习参考

nodejs中文网:http://nodejs.cn/

nodejs中文社区:https://cnodejs.org/

npm淘宝镜像:https://npm.taobao.org/

thinkjs框架官网:https://thinkjs.org/

express框架官网:http://www.expressjs.com.cn/

koa框架官网:https://koa.bootcss.com/#

egg框架官网:https://eggjs.org/zh-cn/

相关文章
相关标签/搜索