Express初始get post express.static 请求 中间件--- 小白

//1.导入express
const express = require('express')
//2.创建 web
const app = express
//3.发送get post 请求  监听客户端发过来的请求,并向客户端响应具体内容
app.get('/ures',(req,res)=>{
//通过express提供的send 方法,向客户端响应一个json对象
   res.send({name:'zs',age:18,})
})
app.post('/ures',(req,res){
   res.send('请求成功')
})
//4.启动 服务器
app.listen(3080,()=>{
   console.log('express server running at http://127.0.0.1:3080')
})

通过Postman 查看验证效果.

//1.通过cmd终端 输入 node 当前文件名 

//2.打开postman

 注意:

          每次修改内容都需要手动重新启动终端.通过ctrl + c 

          或者在npmjs 上面搜索 nodemon 这个工具. 在我们修改代码以后自动重启

     在终端输入 npm install -g nodemon  全局安装

           输入 nodemon  文件名 使用

 express.static 的使用方法

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

//创建一个web 服务器
const app = express()

//通过app.use(express.static)方法快速对台提供静态资源服务器
//html js css 都叫静态资源
//(./clock)代表把当前路径文件夹里面的所有文件都提供为静态资源
//访问静态资源文件的时候会根据添加的顺序查找.
//如果在第一个文件里面找到对应的文件,就不继续查找了

app.use(express.static('./clock'))
app.use(express.static('./files'))
//启动终端
app.listen(3080,() => {
    console.log('express server running at http://127.0.0.1:3080')
})

 

 通过在输入框添加对应的文件名 比如  html  css js 访问对应的内容

 挂载前缀,

挂载前缀的目的就是给访问的路径添加一个对应的说明,能更清楚的知道自己在访问什么地址

//挂在路径前缀.在express.static前面添加一个新的名字
app.use('/abc',express.static('./clock'))

 

express 路由

1.请求方式

2.请求路径

3.请求参数

路由的匹配过程

当请求的方式和请求的路径 同时匹配成功以后.调用对应的处理函数

// 挂载路由
app.get('/', (req, res) => {res.send('hello world.')})
app.post('/', (req, res) => { res.send('Post Request.')})

注意:

      不建议直接挂载到app上.可以使用路由模块创建路由模块

//先创建一个router.js文件夹
const express = require('express')
const router = express.Router()
router.get('/ures', (req, res) => {
    res.send('hello')
})
router.post('/uress', (res, req) => {
    res.send('请求成功')
})

//通过 module.exports 暴露出去
module.exports = router
//然后使用之前创建的router.js
const express = require('express')
const app = express()
app.use(require('./router.js'))
app.listen(3020, () => {
    console.log('http://127.0.0.1:3020');
})

中间件

中间件就是某件事物从开始到结束中间实现的过程.特指某些中间环节.

 express中间件本质上就是一个function 处理函数..

app.get('/', function(req,res,next){ })

next函数是实现多个中间件调用的关键.他表示把关系转交给下一个中间件或者路由.

//定义最简单的中间件函数
const express = require('express')
const app = express()
// const mw = function (req, res, next) {
//     console.log('中间件函数');
//     //把扭转关系转交给下一个中间件或者路由
//     next()
// }
// //客户端发现的任何请求.达到服务器以后都会触发中间件,叫做全局生效的中间件
// //将mw注册全局生效的中间件
// app.use(mw)

//定义全局中间件的简化写法
app.use((req, res, next) => {
    console.log('中间件函数');
    //把扭转关系转交给下一个中间件或者路由
    next()
})

app.get('/', (req, res)=>{
    res.send('hello')
})
app.get('/usd', (req, res)=>{
    res.send('你好')
})
app.listen(3033, () => {
    console.log('http://127.0.0.1:3033');
})

他们之间是共享同一个res.req,通过上由属性下由也有效果

const express = require('express')
const app = express()
app.use((req, res, next) => {
    console.log('中间件函数');
    //把扭转关系转交给下一个中间件或者路由
    const time = Date.now()
    res.startTime = time
    next()
})

app.get('/', (req, res)=>{
    res.send('hello ' + res.startTime)
})
app.get('/usd', (req, res)=>{
    res.send('你好 ' + res.startTime)
})
app.listen(3033, () => {
    console.log('http://127.0.0.1:3033');
})

通过app.use可以定义多个中间件.会按定义的先后顺序打印

const express = require('express')
const app = express()
const mw = (req, res, next) => {
    console.log('第一个');
    next()
}
const mm = (req, res, next) => {
    console.log('第二个');
    next()
}
//单独使用的时候
app.get('/',mw,(req,res)=>{
     res.send('你好')
})
//使用多个的时候使用 [] 或者,隔开
app.get('/', [mw,mm], (req, res) => {
    res.send('hello')
})

app.get('/', mw, mm, (req, res) => {
    res.send('hello')
})


app.listen(3033, () => {
    console.log('http://127.0.0.1');
})

注意事项

  1. 一定要在路由之前注册中间件  (不绝对)

  2. 客户端发送过来的请求,可以连续调用多个中间件进行处理

  3. 执行完中间件的业务代码之后,不要忘记调用 next() 函数

  4. 为了防止代码逻辑混乱,调用 next() 函数后不要再写额外的代码

  5. 连续调用多个中间件时,多个中间件之间,共享 reqres 对象

中间件的分类.

  • 应用级别的中间件

  • 路由级别的中间件

  • 错误级别的中间件

  • Express 内置的中间件

  • 第三方的中间件

 1.通过app.use()    app.get()   app.post()绑定在app实例上的中间件,叫做应用级别的中间件

 2,绑定在 express.Router() 实例上的中间件叫做路由级别的中间件...

绑定在不同的实例上叫法不一样.

错误级别的中间件..  

用来捕获整个项目中发生的错误,从而防止项目崩溃

1.必须放在路由器之后.

2.必须由四个参数.(err ,req, res ,next)

const express = require('express')
const app = express()
app.get('/', (req, res) => {
    throw new Error('服务器错误')
    res.send('hello')
})
app.use((err, req, res, next) => {
    console.log('发生错误' + err.message);
    res.send('Error:'+ err.message)
})
app.listen(3033, () => {
    console.log('http://127.0.0.1:3033');
})

内置中间件

1.express.static  快速托管静态资源

2.express.json  解析json格式的请求体  仅4.16版本以后中使用  只能发送post请求.不能发get

3.express.urlencoded  解析 URL-encoded 格式请求数据   4.16以后兼容  只能发送post

// 导入 express 模块
const express = require('express')
// 创建 express 的服务器实例
const app = express()

// 注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置
// 通过 express.json() 这个中间件,解析表单中的 JSON 格式的数据
app.use(express.json())
// 通过 express.urlencoded() 这个中间件,来解析 表单中的 url-encoded 格式的数据
app.use(express.urlencoded({ extended: false }))

app.post('/user', (req, res) => {
  // 在服务器,可以使用 req.body 这个属性,来接收客户端发送过来的请求体数据
  // 默认情况下,如果不配置解析表单数据的中间件,则 req.body 默认等于 undefined
  console.log(req.body)
  res.send('ok')
})

app.post('/book', (req, res) => {
  // 在服务器端,可以通过 req,body 来获取 JSON 格式的表单数据和 url-encoded 格式的数据
  console.log(req.body)
  res.send('ok')
})

// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(80, function () {
  console.log('Express server running at http://127.0.0.1')
})

express.json()  在Postman打开检测

 

express.urlencodde() 在Postman打开检测

 

第三方中间件.

第三方个人或者第三方团队开发的,自己按需下载配置

1.npm i -g body-parser  下载

2.require导入

3.app.use使用

app.use(parser.urlencoded({ extended: false }))
// app.use(express.urlencoded({ extended: false }))

内置的express.urlencoded就是通过第三方parser.urlencoded进一步开发的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值