Node.js - Express 快速上手

介绍

Express 是一个基于 node.js 的 Web应用开发框架。它提供了一组强大的特性,可以帮助开发人员快速构建高性能的 Web 应用和 API。

Express 的主要特性包括:

  • 轻量级: 核心代码非常简洁,只有几百行,可以快速启动。
  • 高度可扩展:提供了一系列的插件(称为中间件),可以轻松扩展功能。
  • 强大的路由功能:提供了灵活的路由功能,可以为不同的请求指定不同的处理逻辑。
  • 内置模板引擎:提供了对多种模板引擎的支持,可以轻松渲染动态 HTML 页面。

初体验

安装 Express

npm install [email protected]

导入 Express

const express = require("express")

创建 Web 服务器

const app = express()

定义 GET 路由

app.get('/',(req,res)=>{ res.send('GET响应内容') })

定义 POST 路由

app.post('/',(req,res)=>{ res.send('POST响应内容') })

启动服务器

app.listen(80,()=>{ console.log('服务已启动,服务器地址:http://localhost:80/') })

Express 对象

use

用于加载中间件,中间件是指在请求和响应对象之间运行的一些函数,用于处理 HTTP 请求并响应。

中间件

概念

  • 中间件函数是运行在请求和响应之间的一些函数
  • 一个请求中,所有中间件函数会共享同一份 req 和 res 对象
  • 一个请求中,如果中间件函数不调用 next 函数向下调用其他中间件,则代表终止的处理链
  • 注意事项
    1. 全局中间件必须在路由注册之前装载
    2. 中间件调用 next 向下传递后不要再处理任何数据,避免出现混乱

自定义中间件

全局中间件

app.use((rqe,res,next)=>{
	console.log('中间件函数运行了')
	next();
})

局部中间件

// 跳过express的导入以及express的实例创建...
// 定义中间件函数
const hand = (req,res,next)=>{ .... }
// 使用中间件函数
app.get('/',hand,(req,res)=>{ .... })
// 以数组的形式,传入多个中间件函数
app.get('/',[hand,hand],(req,res)=>{ .... })
// 以不定数量传参,传入多个中间件函数
app.get('/',hand,hand,(req,res)=>{ .... })

错误处理中间件

错误处理函数,通常使用 app.use 进行注册,它的作用是捕获应用程序在处理过程中出现错误,防止进程崩溃。
Express 中间件是按顺序执行的,应该在所有其他中间件被定义后,再定义错误处理中间件。
Express 中的错误处理中间件 - 简书 (jianshu.com)

app.use((err,req,res,next)=>{ ... })

express.static

用于指定一个目录作为网站的静态资源,供用户访问
可以指定多个静态资源文件夹,优先级取决于指定的顺序

// 设置静态资源  
app.use(express.static("clock"))  
// 设置静态资源 ,指定前缀,组成地址:http://localhost/files/相关静态资源  
app.use('/files', express.static('files'))

express.Router

用于创建一个独立的路由处理器,每个路由处理器可以用于管理不同的路由。
通过 Router 对象,可以轻松将一个大型的应用程序拆分成多个小的模块。

----------- baseRouter.js -----------
const express = require("express")
const router=  express.Router()

// 注册路由 
router.get('/',(req,res)=>{ ... })
// 导出路由对象 
module.exports = router

----------- app.js -----------
const express = require('express')
const app = express() //创建服务器
const baseRouter = require('./baseRouter.js') //导入路由模块
app.use(baseRouter) // 以使用中间件的方式,注册路由模块
app.listen(80,()=>{ ... })

express.json

用于处理 JSON 数据,JSON 数据会被自动解析并存放到 req.body 对象

app.use(express.json())

express.urlencoded

用于处理 x-www-form-urlencoded 数据,表单数据会被自动解析并存放到 req.body 对象

app.use(express.urlencoded())
  • urlencodedoptions.extend 设置为假时,默认使用 JavaScript 的原生解析 querystring 模块,它无法解析嵌套数据
  • urlencodedoptions.extend 设置为真或不设置时,默认使用的是第三方 qs 模块。

express.text

用于接收 text/plain 的文本数据,存放在 req.body

express.raw

用于接收 buffer 的字节数据,存放在 req.body

Request 对象

query

存放着当前请求地址的查询参数

地址:http://localhost/user?arg=test
console.log(req.query) // { arg: 'test' }

params

存放着当前请求地址的动态参数

定义动态路由

推荐配合动态路由使用 RESTful API架构

app.get('/user/:id',(req,res)=>{ console.log(req.params.id) })

假设访问 http://localhost/user/123456,那么动态参数会存在一个 id,且值为 123456

console.log(req.params) // { id: '123456' }
console.log(req.params.id) // 123456

第三方中间件

Cors

使用后允许接口被跨域访问

安装

npm install cors

使用

const cors = require("cors")
app.use(cors())

express-session

一个基于 Express 的 Session 中间件,会自动维护每个请求的会话状态

安装

npm install express-session

使用

const session = require("express-session")
app.use(session({
	name:"会话名称",
	secret:"加密密钥",
	resave:false,// 固定写法,不需要强制保存
	saveUninitialized:false,// 固定写法,不需要未初始化时强制保存
}))
  • 在使用 express-session 中间件后,会在请求对象(req)上添加一个 session 属性,用于存储当前会话的状态
  • req.session 可以在同一个用户的请求中, 管理这个用户的相关数据.

express-jwt

一个基于 Express 的用于 JWT 鉴权的中间件,需要配合 jsonwebtoken 模块使用。

安装

npm install express-jwt jsonwebtoken

使用

const { expressjwt } = require("express-jwt")
const jwt = require("jsonwebtoken")
const secretKey = 'Test' // 加解密钥

// jwt 计算方式
jwt.sign(content,secretKey,{ expiresIn: '30d' }) // expiresIn 定义到期时间

// 注册鉴权中间件
app.use(expressjwt({  
    secret: secretKey,  //设置密钥
    algorithms: ['HS256']  //设置加密方式
}).unless({'path': "/login"}) //unless指定免验证的接口
)

// 测试路由 
app.get("/profile", (req, res) => {  
    console.log(req.auth)  // 旧版express-jwt存放在req.user,最新版迁移到了req.auth,更加语义化了。
    res.send('通过验证')  
})

escook/express-joi

用于校验表单数据的合法性 NPM文档

express-validator

用于校验表单数据的合法性

你可能感兴趣的:(Node.js,node.js,express,javascript)