来源:Node.js

express

Express是一个流行的Nodejs Web应用程序框架,用于构建灵活且可扩展的Web应用程序和API

它基于Nodejs的HTTP模块创建,简化了处理HTTP请求、响应和中间件的过程,具有以下特点

  • 简洁灵活:Express提供了简单而直观的API,使得构建Web应用程序变得简单快捷
  • 模块化路由:
    • Express使用路由和中间件来处理HTTP请求和响应开发人员可以定义路由规则,将特定的URL路径映射到相应的处理函数
    • Express还支持将路由模块化,使应用程序可以根据不同的功能或模块进行分组,提高代码的组织性和可维护性,使得多人协作开发更加便捷
  • 视图引擎支持:Express可以与各种模板引擎集成,例如EJS、Pug、Handlebars等,使开发人员可以方便地生成动态的HTML页面,并将数据动态渲染到模板中
  • 中间件生态系统:Express有一个庞大的中间件生态系统,可以使用各种中间件扩展和增强应用程序的功能,例如身份验证、会话管理、日志记录、静态文件服务等

使用

基础代码

可以更方便地构造restful api风格的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import express from 'express'

// express是个函数
const app = express()

// 如果想要收到前端传来的json,需要配置中间件
app.use(express.json()) // 支持post解析json

// get请求
// 参数1:请求路径 参数2:回调函数 request请求 response响应
app.get('/get', (req, res) => {
// query参数
console.log(req.query)
res.send('get query')
})

// get请求,动态参数
app.get('/user/:id', (req, res) => {
// params参数
console.log(req.params)
res.send('get id')
})

// post请求
app.post('/post', (req, res) => {
// 请求体
console.log(req.body)
res.send('get body')
})

// 监听端口
app.listen(11451, () => {
console.log('http://localhost:11451')
})

模块化

将全部接口写在同一个文件内的话会难以维护,进行模块化拆分能更好地组织接口

src/list.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import express from 'express'

const router = express.Router()

router.get('/get', (req, res) => {
// 返回json
res.json([
{
id: 1,
name: "yajue"
},
{
id: 2,
name: "mur"
},
{
id: 3,
name: "kmr"
}
])
})

export default router

src/user.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import express from 'express'

const router = express.Router()

router.post('/login', (req, res) => {
// 返回json
res.json({
code: 200,
msg: '登录成功'
})
})

router.post('/register', (req, res) => {
// 返回json
res.json({
code: 200,
msg: '注册成功'
})
})

export default router

app.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import express from 'express'
// user模块
import user from './src/user.js'
// list模块
import list from './src/list.js'

const app = express()
app.use(express.json())

// 注册路由
// 参数1:前缀(防止api重名)
app.use('/user', user) // 请求user的get接口时,应该使用/user/get
app.use('/list', list)

app.listen(11451, () => {
console.log('http://localhost:11451')
})

中间件

可以使用中间件拓展功能,它位于请求和最终路由处理函数之间

middleware/logger.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 日志库
import log4js from 'log4js'

// 控制台、文件输出日志设置
log4js.configure({
appenders: {
// 控制台
out: {
type: 'stdout',
layout: { type: 'colored' },
},
// 文件
file: {
filename: './logs/server.log',
type: 'file'
}
},
// 存放的日志级别
categories: {
default: {
appenders: ['out', 'file'],
level: 'debug'
}
}
})

// 初始化日志
const logger = log4js.getLogger()

// req:请求 res:响应 next:执行下一个中间件,如果不写就卡住
const LoggerMiddleware = (req, res, next) => {
// 每个请求都会经过中间件,每当请求来时,记录一下请求日志
logger.debug(`[${req.method}] ${req.url}`)
next()
}

export default LoggerMiddleware

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import express from 'express'

// 中间件
import LoggerMiddleware from './middleware/logger.js'

import user from './src/user.js'
import list from './src/list.js'

const app = express()
app.use(express.json())

// 使用中间件
app.use(LoggerMiddleware)

app.use('/user', user)
app.use('/list', list)

app.listen(11451, () => {
console.log('http://localhost:11451')
})