• 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('服务器运行~')
    })
    
    • 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

    三、express托管静态资源

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

    挂载路径前缀:
    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){
        ...
    }
    
    • 1
    • 2
    • 3

    路由模块化:

    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      // 向外导出路由对象
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    六、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)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    // 局部生效的中间件
    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')
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    注意事项:

    • 一定要在路由之前注册中间件(除错误级别中间件)
    • 客户端发来请求,可以连续调用多个中间件进行处理
    • 不要忘记调用next()
    • 为了防止代码逻辑混乱,在next()后不要写额外的代码
    • 连续调用多个中间件时,多个中间件之间共享req和res
  • 相关阅读:
    电源管理ISL95869HRTZ、ISL95808HRZ概述、规格和应用
    Java 随机数的获得方法(5种)
    记我的 Windows Dev Kit 2023 使用体验
    Python学习笔记——逻辑判断和循环
    c#设计模式-行为型模式 之 访问者模式
    docker从入门到入土
    命令行工具集合busybox编译
    L60.linux命令每日一练 -- 第九章 Linux进程管理命令 -- top和nice
    Jackson @JsonProperty重复字段处理
    fsbrain的学习笔记
  • 原文地址:https://blog.csdn.net/weixin_45630345/article/details/125587827