Node.js学习笔记(五)

本文介绍了Express,一个基于Node.js的web开发框架,如何创建服务器,以及Express中的基本路由设置,包括GET、POST、DELETE等请求方式。同时,文章详细讲解了中间件的概念,包括next()函数的使用,req和res对象,以及错误处理中间件。此外,还涉及静态资源处理和POST请求主体解析中间件bodyParser的使用。
摘要由CSDN通过智能技术生成

1.了解express

        express:基于node.js平台,快速、开放、极简的web开发框架。

express搭建服务器:

  1. 使用express包
  2.  新建一个项目文件夹
  3.  下载 导入 使用
npm install express --save //安装

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

const app = express() //使用
// 配置路由
app.get('/abc', (req, res) => {
  res.send('Hello World!')
})
// 监听端口
app.listen(8081, () => {
  console.log('服务器监听8081端口成功!')
})

2.express的基本路由

    后端路由:一个路由地址对应一个资源。当前端口请求后端路由时,后端会响应对应的资源。即使路由地址相同,但是请求方式不同也属于不同的路由。

基础路由路由匹配请求方式其他

app.get('路由',中间件函数)

路由精确匹配

get

路由写'*',表示匹配所有路由

app.post('路由',中间件函数)

要求路由精确匹配

post

路由写'*',表示匹配所有路由

app.delete('路由',中间件函数)

要求路由精确匹配

delete

路由写'*',表示匹配所有路由

app.all('路由',中间件函数)

要求路由精确匹配

能匹配所有请求

路由写'*',表示匹配所有路由

app.use('路由',中间件函数)

要求路由以指定路由开始,后面随意

只能匹配任意请求

路由不写,表示匹配所有路由

const express = require('express')
const app = express()

/* 
  1、app.get
  请求地址:http://localhost:8081/api
  请求方式:get
  请求参数:不限
  调用下面配置的基础路由的回调函数 (回调函数中的各个形参 叫中间件) 
*/
app.get('/api', (req, res) => {
  res.send('get请求路径:http://localhost:8081/api')
})

/* 
  2、app.post
  请求地址:http://localhost:8081/api
  请求方式:post
  请求参数:不限
  调用下面配置的基础路由的回调函数 (回调函数中的各个形参 叫中间件) 
*/
app.post('/api', (req, res) => {
  res.send('post请求路径:http://localhost:8081/api')
})

/* 
  3、app.delete
  请求地址:http://localhost:8081/api
  请求方式:delete
  请求参数:不限
  调用下面配置的基础路由的回调函数 (回调函数中的各个形参 叫中间件) 
*/
app.delete('/api', (req, res) => {
  res.send('delete请求路径:http://localhost:8081/api')
})

/* 
  4、app.all
  请求地址:http://localhost:8081/api
  请求方式:不限
  请求参数:不限
  调用下面配置的基础路由的回调函数 (回调函数中的各个形参 叫中间件) 
*/
app.all('/api', (req, res) => {
  res.send('all请求路径:http://localhost:8081/api')
})

/* 
  4、app.use
  请求地址:不限
  请求方式:不限
  请求参数:不限
  调用下面配置的基础路由的回调函数 (回调函数中的各个形参 叫中间件) 
*/
app.use('/use',(req, res) => {
  res.send('我是use')
})
/* app.use((req, res) => {
  res.send('我是use')
}) */

// 监听端口
app.listen('8081', () => {
  console.log('服务器开启成功!')
})

3.express的中间件Next

      中间件函数有三个参数:

  1. req请求对象
  2. res响应对象
  3. next下一个中间件函数(next代表的是下一个中间件函数,调用next()会执行下一个匹配的中间件函数)
app.all('/api', (req, res, next) => {
  console.log('all api')
  next()
})

app.get(
  '/api',
  (req, res, next) => {
    console.log('get api')
    next()
  },
  (req, res, next) => {
    console.log('get2 api')
  }
)

app.post('/api', (req, res, next) => {
  console.log('post api')
})

/* 
  执行顺序 
  如果/api匹配了多个中间件函数,先执行第一个
  如果有next(),就继续执行符合请求条件的下一个中间件函数
  如果没有next(),就停止
*/

4.express的中间件Req

    req中间件的相关属性

      req.query:可以获取get请求的查询字符串,并解析成对象

      req.params:动态路由参数,并解析成对象

app.get('/api', (req, res, next) => {
  // 查询字符串(参数:?name=blue&age=28)
  console.log(req.query) //{}
  res.send('get')
  next()
})

app.get('/api/:id', (req, res) => {
  // :id 就是不确定内容
  console.log(req.params) //{id:xxx}
  res.send('动态路由')
})

5.express的中间件Res

    res中间件的相关属性

      1.通过响应头给浏览器设置cookie

                语法:res.cookie(key,value,{expires:'过期时间对象'})

      2.发送响应主体

                res.send():可以传任何格式

                res.end():只能传字符串和buffer

                res.json():传给前端一个json数据

                res.download('把指定的绝对文件路径让浏览器下载')

      3.当前文件所在文件夹的绝对路径获取方式

                __dirname

const path = require('path')

app.get('/api', (req, res, next) => {
  res.cookie('a', '10', {
    expires: new Date(Date.now() + 3600)
  })

  res.send('get请求')
  // res.send({name:'blue'})
  // res.end({name:'blue'}) //报错

  // res.json({ success: 'success' })

  // res.download(path.join(__dirname, '/package.json'))
})

6.express的中间件错误处理

    一般写在所有的路由配置的末尾

      err:处理前面的中间件出现的错误,以免服务器瘫痪

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

        若需要使用错误处理中间件,四个参数缺一不可

app.get('/api', (req, res) => {
  console.log(a) //a is not defined
})

app.get('/api', (req, res) => {
  console.log(a) //a is not defined
})

app.get('/api', (req, res) => {
  console.log(a) //a is not defined
})

app.use((err, req, res, next) => {
  console.log(err, 'err')
  res.send({ help: '错误!' })
})

7.express的内置静态资源处理中间件

  静态资源处理中间件

    语法:app.use(express.static('静态资源文件夹路径'))

    最好写在所有路由配置前面

const path = require('path')

app.use(express.static(path.join(__dirname, '..', 'public')))

8.post请求主体解析内置中间件

  express的post请求主体解析中间件:bodyParser

    若不用post请求主体解析,node服务器找不到主体是什么

    语法:app.use(express.urlencoded())

// bodyParser中间件
app.use(express.urlencoded()) //express.urlencoded 解析 URL-encoded 格式的请求体数据
app.use(express.json()) //express.json 解析 JSON 格式的请求体数据

app.post('/api', (req, res) => {
  console.log(req.body) //{}
  res.send('post发送成功!')
})

9.express的路由中间件

 接口文件router/index.js

// 引入express
const express = require('express')

// 创建express的路由实例对象
const router = express.Router()

router.get('/login', (req, res) => {
  res.send('login接口')
})

router.post('/info', (req, res) => {
  res.send('info接口')
})

router.get('/loginout', (req, res) => {
  res.send('loginout接口')
})

module.exports = {
  router
}

调用接口文件访问

const express = require('express')
const app = express()
const router = require('./router/index').router

app.use('/user', router)

app.listen('8081', () => {
  console.log('服务器开启成功!')
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值