Express 笔记

Express

入门

  • send()

    它里面封装了 write() 和 end() 方法

    它还可以返回 html 结构

    它默认返回 200,若你想返回 404,可以这样res.status(404).send('操作失败')

  • 路由支持 字符串模式 匹配,还有正则匹配

    // 匹配 /ab/***********(/ab是不可以的),冒号叫做占位符,因为id的值是随机的,所以在这里占个位
    app.get('/ab/:id', (req, res, next) => {
        const id = req.params.id
        res.send('hello')
    })
    
    // 匹配含有a的路径,这里就是一个正则表达式
    app.get(/a/, (req, res, next) => {
        res.send('hello')
    })
    

中间件

下面这样的一个函数,我们就称之为中间件

next()就是进入下一个中间件,若调用res.send('xxx')则会结束这个流程

  • 应用级别中间件(用 app 对象调用的,就是应用级别中间件)

    // 这种不带路径的,每个请求都会执行该中间件
    // 但是必须写在该请求的前面,静态资源也不例外
    // 因为在`express框架`中,写在前面的中间件,会先执行
    app.use((req, res, next) => {
        next()  // 中间件要记的放行或者结束,不然页面会一直转圈圈(pending状态)
    })
    
    // 这种带路径的,只有这个路径下的,才会进入这个中间件
    app.use('/test', () => {
        // ...
    })
    
  • 路由级别中间件(用 express.Router() 调用的)

    const router = express.Router()
    router.post('/login', (request, response) => {
        // ...
    })
    // 将路由挂载至应用
    app.use('/user', router)
    
  • 错误处理中间件(四个参数的就是错误处理中间件,原来它真的是根据参数来定的)

    // 它要放到最后面,意味着前面的中间件都没有结束,那么就是报错了
    app.use((err, req, res, next) => {
        // ...
    })
    
  • 内置中间件

    app.use(express.static('../name'))
    // 绝对路径 或 相对路径
    // 不要被 __dirname 迷惑了,它只是绝对路径而已
    // 注意:这里的相对路径是你在控制台的 执行node指令 的路径为相对路径,与版本无关
    
    app.use('/static', express.static('../name'))
    // 代表 /static/xxx
    

获取请求参数

  • query 参数

    形如 xxx?name=jack

    通过req.query可以拿到

  • body 参数

    需要配置一个中间件,body-parse,目前的 express 是自带的

    那我们应该写在哪里呢?肯定是在路由的前面,不然还解析个屁

    app.use(express.urlencoded())
    // 通过 req.body
    // 不过只能拿 行内的 那种post请求参数
    // 这种格式叫做 Content-Type: application/x-www-form-urlencoded
    
    // 这个说法不知道对不对,反正无论配不配置,都只能拿以上那种参数
    // { extended: false}表示在方法的内部使用querystring系统模块来处理POST请求参数;
    // { extended: true}表示使用qs第三方模块进行处理。
    
    app.use(express.json())
    // 通过 req.body
    // 这个中间件对应这种格式:
    // Content-Type: application/json
    // 发送方式见图一
    // 就是 axios({method: 'post', data: data}) 的格式
    
    const formidable = require('express-formidable')
    app.use(formidable())
    // 通过 req.fields
    
    表单默认的是 Content-Type: application/x-www-form-urlencoded
    若是 Content-Type: multipart/form-data 是上传文件时用的
    

    图一,这也是axios.post('xxx', data)模式

最后

相关链接:

https://www.bilibili.com/video/BV1NG411g7p6?p=4&share_source=copy_web

像模板引擎的话,这个视频里面有讲;像.jade、.ejs应该都类似于jsp吧,看来每个后端都有这样的东西

posted @ 2022-12-13 17:27  朱在春  阅读(41)  评论(0编辑  收藏  举报