设计网站意味着什么,如何替换网站上的动画,西安百度关键词优化,百度一下你就知道官页写在最前#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识#xff0c;需要格外注重实战和官方技术文档#xff0c;文档建议作为手册使用 系列文章
【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n… 写在最前跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识需要格外注重实战和官方技术文档文档建议作为手册使用 系列文章
【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - npm【Node.js】笔记整理 4 - node版本管理工具 nvm【Node.js】笔记整理 5 - Express框架简单入门【Node.js】笔记整理 6 - MongoDB【Node.js】笔记整理 7 - mongoose 本文目录 系列文章前言1、安装2、初始化express项目3、基本配置4、路由4.1、定义4.2、组成 5、获取请求体参数6、获取路由参数7、响应设置8、中间件8.1、全局中间件8.2、路由中间件8.3、静态资源中间件8.4、获取请求体数据 9、防盗链10、路由模块化 脚手架 - express-generator 前言 Express框架是一个基于node.js的极简web应用开发框架他可以作为一个简单的后端去使用换而言之前端可以使用express框架去写后端 Express框架官网
1、安装
npm i express
2、初始化express项目
npm init
npm i express3、基本配置
// 导入express模块
const express require(express)// 创建应用对象
const app express()// 创建后端路由
app.get(接口url, (req, res) {// 对接口进行处理res.end(data)
})// ...其他路由// 开启监听启动服务
app.listen(port, () {// 服务启动成功的回调函数
})4、路由
这个路由是后端的路由和前端的路由有所不同请注意
4.1、定义
路由确定了应用程序如何响应客户端对特定端点的请求也就是说路由是满足此条件的一种特殊映射
4.2、组成
路由的组成部分包括请求方法method、接口url、回调函数callback(req, res)
express提供了以下方法可以方便地使用路由:app.method(path, 中间件 ,callback)
GETapp.get(接口url, (req, res) {})POSTapp.post(接口url, (req, res) {})PUT: app.put(接口url, (req, res) {})DELETEapp.delete(接口url, (req, res) {})…
5、获取请求体参数
其实之前已经记过了
以此路由为例: app.post(/login, (req, res) {})
api功能req.method获取请求方法req.url获取请求接口req.httpVersion获取请求http版本req.headers提取请求头信息req.query获取请求体中的query参数req.get(‘chosen_header’)提取指定名称的请求头req.path获取请求的pathreq.ip获取客户端的ip地址req.params获取params参数
6、获取路由参数
req.query、req.params
7、响应设置
首先express是支持使用http模块设置响应设置的方法来设置响应设置的
express独有的设置相应设置的方法:
api功能res.status( code )设置响应状态码res.set(‘xxx’, ‘yyy’)设置响应头信息比如设置token、Content-Type等res.send( data )设置响应体res.redirect( path )设置前端接收到响应体后页面重定向的pathres.download( file )设置下载相应res.json( { name: ‘hello express’ } )设置响应JSONres.sendFile(__dirname ‘/filename.html’)设置响应文件内容res.send( data )将相应信息发送给前端该方法默认设置字符集为utf-8
…
以上方法均支持链式调用
8、中间件 该节很重要学习时候请结合组件思维 **定义**本质是一个回调函数中间件函数可以像路由回调一样访问request、response
作用使用函数封装公共操作、简化代码。其实说白了就一件事为了高内聚、低耦合
**类型**全局中间件、路由中间件
8.1、全局中间件
全局中间件指的是每一个请求到达服务端后都会执行的函数。从这个角度来看其实axios拦截器就像是一种全局中间件
声明
const middleware_name (req, res, next) {// 对req、res进行统一处理// 该中间件的功能执行结束后若需要执行路由中设置的回调函数那么必须next()next()
}// 全局使用:
app.use(middleware_name)8.2、路由中间件
针对某些请求进行统一处理
声明中间件
const check (req, res, next) {if(xxxx){// 满足条件则处理并执行所在路由的回调// ...next()}else{// ...}
}使用中间件
app.get(/admin, check, (req, res) {// ...res.send(data)
})8.3、静态资源中间件
语法express.static(静态资源文件夹路径)
app.use( express.static(__dirname /public/assets) )8.4、获取请求体数据 需要使用包body-parser 安装
npm i body-parser
导包并获取中间件函数
const bodyParser require(body-parser)// 按需导出函数
// 处理querystring格式请求体
let urlParser bodyParser.urlencoded({ extended: false })
//处理JSON格式的请求体
let jsonParser bodyParser.json()设置路由中间件并使用request.body获取请求体数据
app.post(接口url, urlParser, (req, res) {let body req.body// 对body进行处理res.send(xxx)
})9、防盗链
防止外部网站盗取自己网站的源资源
实现
app.use((req, res, next) {// 检测请求头referer是否为自己的地址let referer req.get(referer)if(referer){let url new URL(referer)let hostname url.hostname if(hostname ! xxx){// 不是自己地址则404res.status(404).send(xxxx)return}}next()
})10、路由模块化
routes/user.js
const express require(express)// 创建路由对象
const router express.Router();// 创建路由规则
router.get(/login, (req, res) {// ....
})
// ...// 暴露router
module.exports routersrc/index.js
const express require(express)
const app express()
// 导入路由模块
const userRouter require(../router/user)// 使用路由
app.use(userRouter)脚手架 - express-generator
npm install [options] express-generator使用:
express myApp # 初始化express项目结构
express install # 安装依赖如果你要使用express发送html页面那么不必删除什么如果只是做后端要把views文件夹和发送html页面相关的代码都删干净