node学习基础四之express

一、express能做什么

能方便快速的创建Web网站的服务器或API接口的服务器

二、express的基本使用

// 1、导入express
const express = require('express')

// 2、创建web服务器
const app = express()

// 4、监听客户端的get和post请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
	res.send({ name:'qq',age: 18 })
})
app.post('/user', (req, res) => {
	res.send('请求成功')
})

// 获取客户端发送过来的查询参数,req.query,默认是一个空对象
// http://127.0.0.1/?name=zs&age=20
app.get('/', (req, res) => {
	console.log(req.params)
	res.send(req.params)
})

// 获取url中的动态参数,req.params,默认是一个空对象
app.get('/user/:id/:name', (req, res) => {
	console.log(req.params)
	res.send(req.params)
})

// 3、调用app.listen(端口号,启动成功后得回调函数),启动服务器
app.listen(80, () => {
	console.log('服务器运行~')
})

三、express托管静态资源

// app.use() 函数的作用,就是用来注册全局中间件。我自己的理解是定义和使用分开。
app.use(express.static('./public'))
app.use(express.static('./file'))

挂载路径前缀:
app.use(‘/demo’, express.static(‘./file’))
访问路径:https:127.0.0.1/demo/file

四、nodemon

发现代码发生变化,自动重启服务器:npm i -g nodemon
nodemon app.js

五、express路由

在express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
express中的路由分3部分组成,分别是请求的类型,请求的url地址、处理函数。

app.method(path, handler){
    ...
}

路由模块化:

var express = require('express')    // 导入express
var router = express.Router()         // 创建路由对象

router.get('/user', (req, res) => {   // 挂载路由
	res.send({ name:'qq',age: 18 })
})
router.post('/user', (req, res) => {     // 挂载路由
	res.send('请求成功')
})

module.exports = router      // 向外导出路由对象

六、express中间件

了解中间件分类请点击这里
业务处理过程中的中间环节,有输入和输出
next(),把流转关系交给下一个中间件或路由
请添加图片描述

// 全局生效的中间件
app.use((req, res, next) => {
	const time = Data.now()
	// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
	req.startTime = time
	next()
})

app.get('/', (req, res) => {
	res.send('page1' + req.startTime)
})
app.get('/user', (req, res) => {
	res.send('page2' + req.startTime)
})
// 局部生效的中间件
const mw1 = (req, res, next) => {
	const time = Data.now()
	// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
	req.startTime = time
	next()
}
const mw2 = (req, res, next) => {
	const time = Data.now()
	// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
	req.startTime = time
	next()
}


app.get('/', mw1, mw2, (req, res) => {
	res.send('page1' + req.startTime)
})
app.get('/', (req, res) => {
	res.send('page1')
})

注意事项:

  • 一定要在路由之前注册中间件(除错误级别中间件)
  • 客户端发来请求,可以连续调用多个中间件进行处理
  • 不要忘记调用next()
  • 为了防止代码逻辑混乱,在next()后不要写额外的代码
  • 连续调用多个中间件时,多个中间件之间共享req和res
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值