NodeJs-express框架

express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架官方网址

# express本身是一个npm包,直接使用npm下载
npm init
npm i express

express路由#

一个路由的组成有 请求方法 , 路径 和 回调函数 组成

send方法用于向客户端发送响应数据,它能够自动根据数据类型设置合适的Content - Type头部信息,并且可以处理多种数据类型,如字符串、对象、数组、Buffer 等

基本使用#
// 导入
const express = require('express')


// 创建应用对象
const app = express()


// 根路由
app.get("/", (request, response) => {

    response.send("index")
})

app.post('/login', (request, response) => {
    response.send("login")
})


// 监听端口启动服务
app.listen(8888, () => {
    console.log("start")
})


获取请求报文参数#
app.all('/login', (request, response) => {
    console.log(request.path) //路径
    console.log(request.query) // 查询参数
    console.log(request.ip) // 请求ip
    console.log(request.get('content-type')) // 获取指定请求头

    response.send("login")
})

获取路由参数#
// 设置路由参数
app.get('/:id.html',(req,res)=>{
    // 获取路由参数
    console.log(req.params.id)
})

响应设置#

express 框架封装了一些 API 来方便给客户端响应数据,并且兼容原生 HTTP 模块的获取方式

// 常规设置
res.status(200) // statusCode
res.set('a','b') // 响应头
res.send("get info")

// 连贯操作,在设置一个之后直接调用下一个
res.status(200).set('a','b').send("get info")

res.redirect('http://baidu.com')//重定向 
res.download('./package.json')//下载响应
res.json()//响应 JSON数据 
res.sendFile(__dirname + '/home.html') //响应文件内容
  
  
    

中间件#

中间件(Middleware)本质是一个回调函数,中间件函数 可以像路由回调一样访问 请求对象、响应对象,中间件的作用 就是 使用函数封装公共操作,简化代码

全局中间件#

每一个请求 到达服务端之后 都会执行全局中间件函数

image-20241217134747519

  1. 声明中间件

    // 声明中间件函数
    // 请求对象、响应对象、继续执行函数
    function ipMiddleware(req, res, next) {
    
        console.log("请求ip :", req.ip)
    
        // 必须调用next才会继续执行后续路由逻辑,否则路由终止
        next()
    
    }
    
  2. 使用中间件

    app.use(ipMiddleware)
    
路由中间件#

如果 只需要对某一些路由进行功能封装 ,则就需要路由中间件,相当于指定路由局部的中间件

app.get('/info',中间件函数,中间件函数,(request,response)=>{ })
静态资源中间件#

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

//静态资源中间件的设置,将当前文件夹下的static目录作为网站的根目录 
app.use(express.static('./static'))
  • 如果静态资源与路由规则同时匹配,谁先匹配谁就响应

  • 路由响应动态资源,静态资源中间件响应静态资源

获取请求体数据#

express 可以使用 body-parser 包处理请求体

  1. 安装

    npm i body-parser
    
  2. 导入

    const bodyParser = require('body-parser')
    
  3. 获取封装好的中间件函数

    //处理 querystring 格式的请求体 let urlParser = 
    let bodyParser.urlencoded({extended:false}));
    
    //处理 JSON 格式的请求体 
    let jsonParser = bodyParser.json()
    
  4. 设置路由中间件,然后可以使用request.body来获取请求体数据

    // 路由中间件
    app.post('/info', urlParser, (request,response)=>{ 
      // 所有的请全体数据
    		console.log(request.body)
      response.send('send')
    })
    

Router#

express 中的 Router 是一个完整的中间件和路由系统,可以看做是一个小型的 app 对象,对路由进行模块化,更好的管理路由

  1. 子文件-创建路由对象

    const router = express.Router()
    
  2. 子文件-使用Router对象而非app添加路由

    router.get('/info',(req,res)=>{
      res.send('info')
    })
    
  3. 子文件-暴露router

    module.exports = router
    
  4. 主文件-引入子路由文件

    const infoRouter = require('./routes/infoRouter')
    
  5. 设置和使用子路由

    app.use(infoRouter)
    
  6. 设置路由前缀

    // 如果设置路由前缀,则对应子路由默认都有该前缀,类似于路由组
    app.use('/info',infoRouter)
    

EJS模版引擎#

模板引擎是分离 用户界面和业务数据 的一种技术,EJS 是一个高效的 Javascript 的模板引擎

  1. 下载ejs

    npm i  ejs --save
    
  2. 引入ejs

    const ejs = require('ejs')
    
  3. 使用ejs渲染

    let city = 'bei'
    
    let str = 'aaa <%= city %>'
    // 使用ejs渲染
    // <%= %>是固定语法,会找到该语法,然后将里面的city 替换成外面的city
    let result = ejs.render(str,{city:city})
    
  4. 在html代码中调用

    <p><%=city%> </p>
    
express中使用ejs#
const express = require('express')


const app = express()

// 设置模版引擎
app.set('view engine', 'ejs')

// 设置模版文件存货位置  模版文件:具有模版语法内容的文化
app.set('views', './views')


app.get('/info', (req, res) => {

    let data = '123213'
    // 渲染info模版
    res.render('info',{data})

})
<!--在设置的模版文件存放目录中,创建模版文件,后缀是.ejs,编写html代码 调用数据 -->
<h1>{%= data %} </h1>

express-generator工具#

express-genrator工具可以快速创建一个应用的骨架

高版本Node自带npx直接运行即可

npx express-generator

作者:木子七

出处:https://www.cnblogs.com/Mickey-7/p/18612452

posted @   木子七  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
workspaces
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示