天天看点

Node.js

1.Node.js概述

 Node.js是运行在服务器端的环境

 (1)对比JS

  JS运行在客户端浏览器,存在多种浏览器,存在兼容性问题;Node.js运行在服务器端,只有V8引擎一种解释器,代码不存在兼容性问题。

  两者都有共同的自定义对象和内置对象(ES对象),不同的宿主对象

  JS用于操作浏览器的内容,实现用户交互,Node.js用于服务器端开发,例如操作数据库,调用其它服务器

 (2)运行方式

  脚本模式

    node  拖拽文件    回车

  交互模式

    node    回车  进入交互模式

    退出交互模式    两次ctrl+c, ctrl+d

 (3)特点

  属于单线程运行逻辑,不会产生死锁,支持数万个并发连接,适合做基于社交网络的大规模WEB应用

  不适合做CPU密集型应用

2.全局对象

 (1)global

  检测变量或者函数是否为全局的

  在Node.js的交互模式下,属于全局作用域

  在脚本文件下,不属于全局作用域

 js下global名称为window

  (2)console对象

  提供了一组用于调试控制台的方法

  console.log(1); //输出日志

  console.info(2); //输出消息

  console.warn(3); //输出警告

  console.error(4); //输出错误

  console.time()   开始计时

  console.timeEnd()   结束计时

  开始计时和结束计时两者输出的值要保持一致

  (3)process对象

  进程:在计算机上开启的任何软件都代表进程

  process.arch   查看当前CPU架构

  process.platform   查看当前的操作系统

  process.version  查看当前Node.js的版本号

  process.pid   查看当前的进程编号

  process.kill()   结束指定编号的进程

 (4)Buffer对象

  缓冲区,缓冲存储器

  是内存中的一块临时存储数据的区域

  var buf=Buffer.alloc(5, 'abcde');//创建buffer,分配空间大小为5个字节,并存储数据

  buf.toString()  //将buffer转为字符串

 Node.js下每个汉字占三个字节

1.模块

require: 是一个函数,用于引入其他模块

module.exports: 导出的对象,默认是一个空对象要暴露的内容需要添加到对象中

__dirname:  获取当前模块的绝对路径

__filename: 获取当前模块的绝对路径+模块名称

2.模块的分类

模块分为三种:自定义模块、核心模块、第三方模块

                 以路径开头                                                                                     不以路径开头

文件形式模块      require('./circle.js')                                                                   require('querystring')

                 常用于引入自定义模块                                                                      用于引入官方提供核心模块           

目录形式         require('./demo-01.js')                                                                   require('tao')

 首先会找到目录下查找package.json 文件中main 对应的文件,果 找不到自动查找01.js                 首先会到当前目录下的node_modules目中寻找tao目录,用于引入第三方模块                                                                        如果找不到会一直往上一级目录的node_modules目录中寻找

3.包的npm

 包:指的是第三方模块,是一个目录模块

 npm:用来管理包的工具模块,属于是第三方模块,在Node.js安装时候已经附带安装

    npm  -v  查看npm版本

 CommonJS:是一种规范,制定了Node.js的模块规范

 网址: www.npmjs.com

 (1)切换命令行路径

   在要进入的目录的空白区域,按住shift,单击鼠标右键,选择“在此处打开powershell窗口”

  在cmd下

     cd  粘贴路径

     如果有盘符的切换,需要添加  盘符名称:

(2)npm命令

npm init -y 初始化一个package.json文件,记录下载安装的包 

npm install 包名称 下载安装指定的包,会将包放入到目前目录的 node_modules 目录下,如果不存在会自动创建;同时会生成 package-lock.json 的文件用于记录所有包的版本号,package.json中只是记录当前安装包的安装信息

npm install  自动下载package.json 和 package-lock.json中记录的包

4.查询字符串模块(querystring)

查询字符串:浏览器向服务器传递数据的一种方式,位于网址中

http://search.jd.com/Search?keyword=笔记本&price=4000

协议     域名或者IP    字符串查询

查询字符串模块:专门用于操作查询字符串的工具

parse()   将查询对象解析为对象

5.url

统一资源定位,互联网上的任何的资源(html.css.js,js,图像,视频,声音)都有相应的URL

http://www.codeboy.com:9999/product_details.html?lid=13#one

协议   域名或者IP地址   端口  文件在服务器的路径  查询字符串  锚点

6.定时器模块(timer)

(1)一次性定时器

开启

let timer=setTimerout(回调函数,间隔时间)

当间隔时间到了,会调用一次回调函数,间隔时间单位是毫秒

清除

clearTimeout(timer)

(2)周期性定时器

let timer=setlnterval(回调函数,间隔时间)

每隔一段时间,调用一次回调函数

clearinterval(timer)

(3)立即执行定时器

var timer=setlmmediate(回调函数)

clearlmmediate(timer)

process.nextTick(回调函数)

没有清除

定时器的回调函数是在事件队列中执行,当程序执行完才会执行事件队列的回调函数

Node.js

1.同步和异步

同步:在主程序中执行,会阻止主程序中后续代码的执行,通过返回值获取结果

异步:在一个独立的线程中执行,不会阻止主程序后续代码的执行,通过回调函数获取结果

2.文件系统模块 (fs)

文件分为目录形式和文件形式

(1)查看文件状态

 statSync(文件的路径)  / stat(文件的路径,回调函数);

 isDirectory()  是否为目录

 isFile()       是否为文件

(2)创建目录

mkdirSync(文件的路径)/mkdir(文件的路径,回调函数)

(3)移除目录

rmdirSync(文件路径) /rmdir(文件的路径,回调函数)

只允许移除空目录

(4)读取目录

readdirSync(文件路径)/readdir(文件路径,回调函数)

(5)清空写入文件

writeFileSync(文件的路径,写入的数据)/writeFile(文件的路径,回调函数)

(6)追加写文件

appendFileSync(文件的路径,写入的数据) /appendFile (文件的路径,回调函数)

如果文件不存在,首先创建文件然后写入数据

如果文件存在,会在文件的末尾追加写入数据

(7)读取文件

readfileSync(文件的路径)/readfile(文件的路径,回调函数)

(8)删除文件

unlinkSync(文件的路径)/unlink(文件路径,回调函数)

(9)检测文件是否存在

existsSync(文件的路径) 存在 return  true  不存在 return  false

(10)拷贝一个文件

copyFileSync(原文件路径,目标文件路径)/ copyFile(原文件路径,目标文件路径,回调函数)

3.文件流

creatReadStream()  创建可读取的文件流

creatWriteStream()  创建可写入的文件流

on(事件名称,回调函数) 一旦触发事件,自动调用回调函数,其中事件名称是固定的字符串形式

pipe()  管道,可以将读取的流添加到写入的流

4.http 协议

http:超文本传输协议

是浏览器和WEB服务器之间的通信协议

(1)通用头信息(general)

Request URL:请求的URL,要请求资源

Request Method:请求的方法,对资源操作的方式 get post....

Status Code :响应状态码

1**:已经接受到了部分请求,还没结束

2**:成功响应

3**:响应的重定向,发生跳转

4**:客户端错误

5**:服务器错误

(2)响应头信息(response)

Location:要跳转的URL通常结合状态3**使用

Content-type:响应的内容类型,可以解决中文乱码

text/html; charset=utf-8

(3)请求头信息(request)

(4)请求主体

只有在传递数据的时候才会出现

5.http模块

可以用来WEB创建服务器

WEB服务器:给客户端提供资源的服务器例如数据文件...

   创建WEB服务器

const app=http.createServer();

   设置端口

app.listen(8080,()=>{

    console.log('WEB服务器启动成功')

});

 添加事件,通过事件接受请求做出响应

 app.on('request',(req,res)=>{

     req 请求对象

     req.url获取请求的URL ,格式 '/xxxx'

     req.method 获取请求方法

     res 响应的对象

     res.writeHead() 设置相应到浏览器

     res.end() 结束并发送响应

 })

继续阅读