一、简介
大前端必备之 node.js ,有了nodejs,你可以干的事有哪些?
- 你可以用 VUE 写前端交互界面,用 nodejs 写后端接口 ,全栈工程师近在咫尺呀 //我就仅仅了解这个哈哈哈
- 统一公共类库,将代码标准化
- 异步编程
- 处理IO密集型应用
- 构建复杂系统
- 实现对于内存堆栈的监控系统
NodeJS 的特征:
浏览器能运行 JS 代码是因为其内置了 JS 的解析器。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
在你的服务器上,你可以利用终端直接操作运行 JS 文件,当然也可以值显
回忆一下 WEB APIS 是浏览器对 JS 开放的内置接口,但 Node 不能操作DOM,BOM,因为他没这些接口,但他也内置了很多APIS,例如 fs 文件操作模块
二、 Node 内置模块
1、 fs模块
...
2、 Path模块
Path . join ( __dirname, 'adr1', 'adr2' ... ) #连接多个url,../为返回上一层,./自动省略
三、 nodejs 的内置 HTTP 模块
你想自己创建服务端吗? 来来来,一起手撸个服务器吧,放心,it's so easy !
# 简单创建http服务器
const http = require('http') #引入
server = http.createServer() #实例化
#req ,res 分别为客户端和服务端相关的数据和信息,你可以在次拦截接收进行处理哟 eg.
server.on('request',(req,res)=>{
console.log('有请求过来哟!')
res.setHeader('Content-Type', 'text/html;charset=utf-8') #解决中文乱码
res.body = '我是你召唤的神龙!!'
res.end(res.body) #送至客户端
})
#监听
server.listen('8080',()=>{
console.log('事务中心,坚持为人民服务!')
})
四、Express web开发框架
1. Express 路由
-
初识路由
挂载的路由依次运行、method 和 url 须 同时匹配成功
const express = require('express')
const app = express()
#挂载
app.get('url' , (req,res)=>{
res.send()
})
app.post('url', (req,res)=>{
...
})
app.listen('port', ()=>{})
- 模块化路由
- 抽离 router.js 文件
- 导入并使用
#router.js----
const expree = require('express')
const router = express.Router()
#参上创建并挂载路由
...
module.exports = router #导出路由对象
#index.js----
const express = require('express')
const router = require('./router.js')
const app = express()
app.use(router) #全局注册中间件
app.listen('8080',()=>{} )
-
路由添加前缀
你还记得托管静态资源的使用吗
app.use( '前缀' , express.static(' ./file ') )
路由也是这样,eg.
app.use( '/api' , router )
2. Express 中间件
图示:
graph TD
req --> m1 --> next --> m_arry --> next --> router
本质就是一个 function( req, res, next )
- 全局中间件 app.use( function( req, res, next ) )
- 局部中间件 app.get( 'url', [ m1,m2,m3... ], (req,res) => {} )
中间件使用注意点:
- 路由之前使用
- 可以衔接多个中间件进行处理
- 一定要 next()
- next()后不跟代码,以防代码逻辑混乱
- 多个中间件共享 req, res 对象
3. 中间件的分类
-
应用程序中间件,直接挂载在app上
-
express@4.16.0 后内置的中间件
- static()
- express.json()
- express.urlencoded({extended: false}) #基于第三方 body-parser
在默认情况下,客户端请求体的body在不经中间件解析下的值为 undefined
4. 自定义中间件
实现步骤:
- 定义中间件
- 监听 req 的 data 事件
- 监听 req 的 end 事件
- 使用 querystring 模块解析请求体数据
- 将解析出来的数据对象挂载到 req.body
- 将自定义中间件封装成模块
mid.js
const Mymid = require('./mid')
app.use()