node.js个人总结

简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
fs模块
1、读取文件 中的内容
fs.readFile(路径,格式?,callback(err,data)=>{})
2、向文件中写入内容
fs.writeFile(路径,内容,格式?,()=>{})
路径:__dirname 当前文件所处的目录

path路径模块
1、路径拼接
path.join(’/a’,’/b’,’/c’,’/d’) /a/b/c/d 不限参数个数
path.jon(__dirname,’/a/b’) 当前所处目录+’/a/b’
2、获取文件的名称
path.basename(路径,文件名的后缀?)
3、获取路径中的文件扩展名(后缀)
path.extname(路径)

http模块
1、创建web服务器实例
const server = http.createServer()
2、为服务器实例绑定request事件
第一个参数事件名称
server.on(‘request’,(req,res)=>{})
req.url获取请求的url
res.setHeader(响应头,值)
res.setHeader(‘Content-Type’,‘text/html:chatset=utf-8’)设置响应头
res.end() 向客户端发送内容
3、启动服务器
server.listen(端口号,()=>{})

querysting模块
解析请求提数据
querystring.parse() 字符串转为对象

Node.js规范:
遵循了commonjs模块化规范,是同步的,exports导出,require导入
Npm:包管理工具
package.json包管理配置文件,记录项目中所用到的包和版本
查看当前下包镜像源:npm config get registry
切换为淘宝源:npm config set registry=https://registry.npm.taobao.org/

nrm
npm i nrm -g
查看镜像源 nrm ls
切换镜像源 nrm use 镜像源别名

包的分类:
1、项目包:开发依赖包 -D(开发中用到的)+核心依赖包(上线后用到的)
2、全局包:执行npm install 包名 -g 装到电脑的c盘,工具性质的包安装在全局
npm工具: i5ting_toc 将md文件转为html页面

包的结构规范:
1、必须以单独的目录存在
2、必须含有package.json文件
3、package.json中必须含有name(名字),version(版本号),main(入口文件)三个属性。

模块加载机制:
内置模块加载优先度最高(node_modules)

Express
是基于node.js平台,快速、开放、极简的web开发框架(内置的http模块的封装,专门用来创建web服务器)
1、创建服务器
const app = express()
2、监听get请求
app.get(端口,(req,res)=>{
发送数据给前端
res.send({name:‘shan’,age:18})
获取客户端发送过来url上的参数
req.query get请求
获取动态参数
req.params
})
3、监听post请求
app.post(端口,(req,res)=>{})
4、启动服务器
app.listen(端口号,()=>{})
托管静态资源(开放静态资源目录)
app.use(express.static(‘目录名’))

nodemon
监听项目文件的变动,当代码被修改后,或自动重启项目
nodemon 文件路径 (代替node 文件路径)

express路由
客户端的请求和服务器处理函数之间的映射关系
由三部分组成,请求的类型,请求的url地址,处理函数
app.类型(路由地址,处理函数)
app.get(‘路由地址’,(req,res)=>{})
app.use(‘前缀’,中间件) 注册全局中间件
req.on(‘data’,(value)=>{})监听data事件
req.on(‘end’,(value)=>{})监听end事件,所有事件都执行完成
req.body=body 将数据挂载在body上 post请求,通过客户端请求体,发送到服务器的 url-encoded 数据(表单数据)
使用post接收表单数据,必须使用的中间件
express.urlencoded({extended:false}) 获取url-encoded格式的请求数据

模块化路由
方便路由模块化管理,不建议将路由直接挂载在app上,推荐将路由抽离为单独的模块。
路由抽离为单独模块的步骤
1、创建路由模块对应的js文件
const express = require(‘express’)
2、express.Router()创建路由对象
const router = express.Router()
3、向路由对象上挂载具体的路由
router.get(‘路由’,(req,res)=>{
res.send(’’)
})
4、使用module.exports向外共享路由对象
module.exports=router
5、使用app.use(router)函数注册路由模块

express中间件:
特指业务流程的中间处理环节
中间件的格式
express的中间件,本质上就是一个函数,(req,res,next函数)
中间件参数中必须带有next函数
next函数实现多个中间件连续调用的关键,把流转关系转交给下一个中间件或路由

中间件函数
const mw = (req,res,next)=>{
next()
}

全局中间件
客户端的请求到达服务器后,都会生效的中间件
app.use(mw)
中间件的作用
多个中间件之间,共享同一份req和res,我们可以在上游的中间件中,统一为req或res对象添加自定义的属性或方法,供下游的中间件或路由进行使用
局部中间件
在路由中定义的中间件,只在当前路由中生效
app.get(path,中间件函数,(req,res)=>{})
多个局部中间件
app.get(path,中间件函数,中间件函数…,(req,res)=>{})
app.get(path,[中间件函数,中间件函数…],(req,res)=>{})

中间件注意事项
1、在路由前面注册中间件(错误可注册在后边)
2、客户端发送的请求可以连续调用多个中间件
3、中间件执行最后要调用next函数
4、连续调用多个中间件,req和res可以共享

express中间件分类
1、应用级别中间件:app.use() app.get() app.post() 绑定在app实例上的中间件
2、路由级别中间件:绑定到expess.Router()实例上的中间件
3、错误级别中间件:捕获项目中发生的异常错误 (error,req,res,next)=>{},防止项目崩溃
4、express内置中间件:expess.static() 托管静态资源 expess.json 解析json数据 express.urlencoded 解析urlencoded的数据
5、第三方中间件:由第三方开发的中间件

cors跨域
cors:跨域资源共享,有一系列的http响应头组成,这些http响应头决定浏览器是否阻止前端js代码跨域获取资源
跨域出现的原因:域名,端口,协议的不同会出现跨域问题。
注意点:1、在服务端配置 2、有兼容性,支持XMLHttpRequest Level2的浏览器才支持cors跨域(IE10+,Chrome4+,Firefox3.5+)
cors是express的第三方中间件,可以解决跨域问题
app.use(cors())

cors响应头
Access-Control-Allow-Origin
:允许任何域的请求
“域名”:允许指定域的请求
res.setHeader(‘Access-Control-Allow-Origin’,'域名|
’)
Access-Control-Allow-Headers 设置请求头
res.setHeader(‘Access-Control-Allow-Origin’,‘Content-Type,X-Custom-Header’)
Access-Control-Allow-Methods 设置方式,默认只支持get、post、head请求
res.setHeader(‘Access-Control-Allow-Methods’,‘PUT、DELETE|*’)

cors请求的分类
1、简单请求
请求方式:get、post、head
http头部信息不能超过9个非自定义字段
特点:客户端与服务器之间只会发生一次请求
2、预检请求
请求方式在 get、post、head 之外
请求头中包含自定义头部字段
向服务器发送了 application/json 格式的数据
特点:客户端与服务器之间会发生两次请求,option预检请求完成后才会发送真正的请求

jsonp跨域必须在cors之前配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值