express框架

1.路由介绍、获取请求报文参数、路由参数

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

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

// 创建路由对象
// get
app.get('/',(req,res)=>{
    // 原生获取请求报文参数
    console.log(req.method)
    console.log(req.url)
    console.log(req.httpVersion)
    console.log(req.headers)
    
    //express操作
    console.log(req.path);
    console.log(req.query); 
    console.log(req.ip);//获取ip
    console.log(req.get('host'));//获取请求头
    res.send('home')
})
// post
app.post('/login',(req,res)=>{
    res.send('login')
})
// 匹配所有方法
app.all('/all',(req,res)=>{
    res.send('all')
})

// 获取路由参数
app.get('/:id',(req,res)=>{
    console.log(req.params.id);//获取路由参数
    res.send('product detail')
})
// 404,其他未匹配路由
app.all('*',(req,res)=>{
    res.send('404 NOT FOUND')
})
// 监听端口
app.listen(3000,()=>{
    console.log('已启动....');
})

2.响应设置

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

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

// 设置响应
app.get('/result', (req, res) => {

    // http模块设置响应方式
    // res.statusCode = 404
    // res.statusMessage = 'NOT F'
    // res.setHeader('abc','xyz')
    // res.write('响应体')
    // res.end('hi')

    // express响应
    // res.status(500)
    // res.set('xxx','yyy')
    // res.send('中文响应')
    // 连贯操作
    // res.status(404).set('xxx','yyy').send('你好朋友')

    // res.redirect('https://www.baidu.com/')//重定向
    // res.download('./package.json')
    res.json({
        age: 23,
        name: 'xxx'
    })//响应json

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

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

3.中间件

3.1 全局中间件

中间件函数记录访问ip及url

// 导入express
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('/admin', (req, res) => {
    // let { url, ip } = req
    // fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url}  ${ip}\r\n`)
    res.send('管理')
})
app.get('/home', (req, res) => {
    res.send('首页')
})

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

在这里插入图片描述

3.2 局部中间件
// 导入express
const express = require('express')

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

// 声明中间件函数
function recordMiddleware(req, res, next) {
    if(req.query.code == '521'){
        next()
    }else{
        res.send('错误!')
    }
}
app.get('/admin',recordMiddleware, (req, res) => {
    res.send('管理')
})
app.get('/home', (req, res) => {
    res.send('首页')
})

// 监听端口
app.listen(3000, () => {
    console.log('已启动....');
})
3.3 静态资源中间件

通过访问 http://127.0.0.1:3000/form.html 可访问 02.路由的介绍 文件夹下的form.html

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

// 创建应用对象
const app = express()
// 静态资源中间件设置 __dirname+'/02.路由的介绍'为静态资源文件夹的目录
app.use(express.static(__dirname+'/02.路由的介绍'))

app.get('/admin', (req, res) => {
    res.send('管理')
})
app.get('/home', (req, res) => {
    res.send('首页')
})

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

注意事项:

  • index.html文件为默认打开的资源
  • 如果静态资源与路由规则同时匹配,谁先匹配就响应谁
    例如:
//app.use声明在前,所有先响应静态资源;如果admin路由写前面,则会响应‘管理’
app.use(express.static(__dirname+'/02.路由的介绍'))
app.get('/admin', (req, res) => {
    res.send('管理')
})
  • 路由响应动态资源,静态资源中间件响应静态资源
3.4 获取请求体数据的中间件 – body-parder插件

详细使用可在 https://www.npmjs.com/package/body-parser中查看

// 导入express
const express = require('express')
const bodyParser = require('body-parser')
// 创建应用对象
const app = express()

const urlencodedParser = bodyParser.urlencoded({ extended: false })

// 获取html页面
app.get('/login',(req,res)=>{
    res.sendFile(__dirname+'/form.html')
})

// 登录
app.post('/login',urlencodedParser,(req,res)=>{
    console.log(req.body);//可获取请求体信息
    res.send('获取用户数据')
})

// 监听端口
app.listen(3000,()=>{
    console.log('已启动....');
})
3.5 资源防盗链

只有当http://127.0.0.1:3000/form.html时能访问到图片资源


// 创建应用对象
const app = express()
// 防盗链中间件
app.use((req,res,next)=>{
    let referer = req.get('referer')
    if(referer){
        let url = new URL(referer)
        let hostname = url.hostname
        if(hostname !=='127.0.0.1'){
            res.status(404).send('<h1>404</h1>')
        }
    }
    next()
})
// 静态资源中间件设置 __dirname+'/02.路由的介绍'为静态资源文件夹的目录
app.use(express.static(__dirname+'/02.路由的介绍'))

app.get('/admin', (req, res) => {
    res.send('管理')
})

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

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <img src="http://127.0.0.1:3000/case1.png" alt="" srcset="">
    <form action="http://127.0.0.1:3000/test" method="post">
        <input type="text" name="username">
        <input type="text" name="password">
        <input type="submit" value="提交" style="color:white;background-color: rgb(13, 83, 235);">
    </form>
</body>
</html>

4.路由模块化

当路由较多时,写在一个文件内比较混乱,后期维护成本高,所以可以利用路由模块化 将路由写在多个文件中
路由主文件:

// 导入express
const express = require('express')
const info = require('./info')
// 创建应用对象
const app = express()
app.use(info)
//app.use('/info',info) 设置此文件下的路由的前缀
// 创建路由对象
// get
app.get('/',(req,res)=>{
    res.end('home')
})
// 404,其他未匹配路由
app.all('*',(req,res)=>{
    res.end('404 NOT FOUND')
})
// 监听端口
app.listen(3000,()=>{
    console.log('已启动....');
})

其他文件:
info.js:

const express = require('express')

// 创建路由对象
const router = express.Router()

router.get('/hi',(req,res)=>{
    res.send('<h1>hi页面</h1>')
})

module.exports = router
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值