ExpressJs框架

一.express介绍

express是一个基于Node.js平台的极简,灵活的WEB应用开发框架

简单来说,express是一个封装好的工具包,封装了很多功能,便于我们开发WEB应用(HTTP服务)

二.express使用

2.1.express下载

express本身是一个npm包,所以可以通过npm安装,有了这个包,我们在开发一些服务端应用时会相对简单,大大提升我们的开发效率

2.1.express初体验

代码示例

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

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

// 3.创建路由
app.get('/home',(req,res)=>{
    res.end('home')
})

// 4.监听端口,启动服务
app.listen(3000,()=>{
    console.log('3000端口服务已启动');
})

三.express路由

3.1.什么是路由

官方定义:路由确定了应用程序如何响应客户端对特定端点的请求

3.2.路由的使用

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

express中提供了一系列方法,可以很方便的使用路由,使用格式如下

app.<method>(path,callback)

代码示例:

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

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

// 创建路由
app.get('/',(req,res)=>{
    res.end('首页')
})

app.get('/home',(req,res)=>{
  res.end('home')
})

app.get('/login',(req,res)=>{
    res.end('login')
})

app.all('/test',(req,res)=>{
    res.end('testtest')
})

// 托底的路由
app.all('*',(req,res)=>{
    res.end('haha 404 not found')
})

// 监听端口,启动服务
app.listen(3030,()=>{
    console.log('3030端口已启动');
})

3.3.获取请求参数

express框架封装了一些API来方便获取请求报文中的数据,并且兼容原生HTTP模块的获取方式

const express=require('express')

const app=express()

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

    //原生方式
    console.log(req.method);//GET
    console.log(req.url);//  /request
    console.log(req.httpVersion);//1.1
    console.log(req.headers);

    // express操作
    console.log(req.path);//   /request
    console.log(req.query);//{ a: '100', b: '200' }

    //获取ip
    console.log(req.ip)// ::ffff:127.0.0.1

    // 获取请求头
    console.log(req.get('host'));//127.0.0.1:3040


    res.end('hello express')
})

app.listen('3040',()=>{
    console.log('3040端口已启动');
})

3.4.获取路由参数

路由参数指的是URL路径中的参数(数据)

const express=require('express')

const app = express()

app.get('/:id.html',(req,res)=>{
    const id=req.params.id
    res.setHeader('content-type','text/html;charset=utf-8')
    res.end('商品详情'+id)
})

app.listen('9000',()=>{
    console.log('端口9000已启动');
})

四.express响应设置

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

const express=require('express')

const app=express()

app.get('/response',(req,res)=>{
    // 原生响应
    // res.statusCode=404
    // res.statusMessage='love'
    // res.setHeader('xxx','yyy')
    // res.write('hello express')
    // res.end('设置响应')

    // express响应
    // res.status(500)
    // res.set('aaaa','bbbb')
    // res.send('你好 express')

    // express响应连贯操作
    res.status(500).set('abc','def').send('这都是ok的')
})

app.listen(8000,()=>{
    console.log('8000端口已启动');
})

其他响应设置

const express=require('express')

const app=express()

app.get('/response',(req,res)=>{
    //  跳转
//    res.redirect('http://www.baidu.com')
    //下载响应
    // res.download(__dirname+'/info.txt')

    // jSON响应
    // res.json({
    //     name:'菜市场',
    //     slogen:'买菜要买新鲜的'
    // })

    // 响应文件内容
    res.sendFile(__dirname+'/test.html')


})

app.listen(8000,()=>{
    console.log('8000端口已启动');
})

五.express中间件

5.1什么是中间件

中间件(Middleware)本质是一个回调函数

中间件函数可以像路由回调一样访问请求对象(request),响应对象(response)

5.2中间件的作用

中间件的作用就是使用函数封装公共操作,简化代码

5.3.中间件的类型

  • 全局中间件
  • 路由中间件
5.3.1定义全局中间件

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

声明中间件函数

const express=require('express')

const fs=require('fs')
const path=require('path')

const app=express()

function recordMiddleware(req,res,next){
    let {url,ip}=req
    fs.appendFileSync(path.resolve(__dirname,'./access.log'),`${url} ${ip}\r\n`)
    next()
}

app.use(recordMiddleware)

app.get('/home',(req,res)=>{
    res.end('前台首页')
})

app.get('/admin',(req,res)=>{
    res.end('后台首页')
})

app.all('*',(req,res)=>{
    res.write('页面找不到了')
})

app.listen('8090',()=>{
    console.log('端口8090已开启');
})

5.3.2定义路由中间件
/**
 需求,判断请求的url中是否有code=123,有则往下执行,没有就返回‘暗号错误’
 */

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

function checkedCodeMiddleWare(req,res,next){
    if(req.query.code==='123'){
      return  next()
    }
    res.send('暗号错误')
}

app.get('/admin',checkedCodeMiddleWare,(req,res)=>{
    res.send('后台首页')
})

app.get('/setting',checkedCodeMiddleWare,(req,res)=>{
    res.send('设置首页')
})

app.all('*',(req,res)=>{
    res.send('页面没有找到')
})
app.listen('8090',()=>{
    console.log('8090端口已启动');
})
5.3.3.静态资源中间件

 创建静态资源中间件,/public就是网站根目录,或者叫静态资源根目录,获取到url以后,静态资源中间件会根据路径参数去根目录中去找相关文件作为响应发给浏览器

注意事项:

1.index.html为默认打开的资源

2.如果是静态资源与路由规则同时匹配,谁先匹配谁就响应

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值