You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

4.9 KiB

express框架学习

B站 -前段知识分享喵- 《黑马2020最新 Express 教学视频》

特性

  1. 简洁的路由定义方式

  2. 简化了HTTP请求参数

  3. 模板引擎支持度高,方便渲染

  4. 中间件,有效控制请求

  5. 大量第三方中间件插件

框架入门

//  引入express
const express = require("express");

//  创建网站服务器
const app = express();

//  路由
app.get("/",(req,res)=>{
    res.send("Hello Node For Express");
    //  send替代了end
    //  1.自动检测响应内容类型
    //  2.自动设置HTTP状态吗
    //  3.自动设置响应类型和编码
});

app.get("/list",(req,res)=>{
    res.send({name:"何小龙",sex:"男"})
})

//  开启服务器监听
app.listen(80)

中间件

中间件包含中间件方法中间件处理函数 中间件由express提供,负责拦截请求,请求函数由开发者提供

app.get("path",fun)
app.post("path",fun)

可以出现多个中间件,但是一旦匹配成功就不会再往下进行

app.use

app.use()中,第一个参数可以不传递路径,对应的是全局,注意需要next() 正常情况下传递路径,和 post,get相同

自定义404

//  引入express
const express = require("express");

//  创建网站服务器
const app = express();

app.use((req,res,next)=>{
    next()
})

app.get("/",(req,res)=>{
    res.send("这里是根目录")
})

// app.use()        这里不能使用/,否则会匹配所有,和不写一样

//  自定义404
//  必须写在最后
app.use((req,res,next)=>{
    res.send("请求页面不存在!")
})


//  开启服务器监听
app.listen(80);
console.log("服务器已开启")

错误处理中间件

app.get("/",(req,res,next)=>{
    fs.readFile("./05.js",(err,r)=>{
        if (err!=null){
            next(err)
        }else {
            console.log(r.toString())
            res.send(r.toString())
        }
    })
})

app.use((err,req,res,next)=>{
    res.status(500).send("服务器出现错误"+err)
})

模块化路由

const app = express();

const index = express.Router()
const home = express.Router()

app.use("/index",index)
app.use("/home",home)

home.get("/",(req,res)=>{
    res.send("home")
})
home.get("/hexi",(req,res)=>{
    res.send("home/hexi")
})

模块化编程实现

//  07.js

const express = require("express")

const router = require("./router")

const app = express()

app.use("/home",router.home)
app.use("/index",router.index)

app.listen(80)


//  router.js

const Router = require("express").Router

const home = Router()
const index = Router()

home.get("/",(req,res)=>{
    res.send("home/")
})

index.get("/",(req,res)=>{
    res.send("index/")
})


module.exports= {home,index}

获取get参数

const express = require("express")

const app = express()

app.get("/",(req,res)=>{
    res.send(req.query)
})

app.listen(80)

获取post参数

//  引入express
const express = require("express");
const bodyParser = require("body-parser")
//  获取post数据,必须导入这个包

//  创建网站服务器
const app = express();

app.use(bodyParser.urlencoded({extended:false}));
//  extended为true时,实用qs格式化,效率更高

app.post("/",(req,res)=>{
    console.log(req.body.name)
    res.send(req.body)
    //  req.body获取数据
})

//  开启服务器监听
app.listen(80)

use方法

const express = require("express")

const app = express()

app.use(fun())
//  注意这里直接调用函数,所以直接加括号

function fun(){
    return (req,res,next)=>{
        console.log(req.url);
        console.log(req.method);
        next()
    }
}

app.get("/",(req,res)=>{
    res.send("xsxaxasxasx")
})

app.listen(80)

动态路由

const express = require("express")

const app = express()

app.get("/user/:id",(req,res)=>{
    res.send(req.params)
})
//  动态路由,实用':'
//  req.params来获取

app.listen(80)

静态文件

const express = require("express")
const path = require("path")
const app = express()

app.use(express.static("static"))
console.log(path.join(__dirname,"static"))
//  最好实用console中的地址
//  嗲用地址不用static

app.get("/",(req,res)=>{
    res.send("你好")
})

app.listen(80)

模板文件

//  express官方微了art-template模板引擎更好的适用于express,在其基础上封装了press-art-template

const express = require("express")

const app = express()

//  当渲染后缀会art的模板时,实用express-art-template
//  可以使用多种模板引擎
//  模板后缀,选用的模板引擎
app.engine("art",require("express-art-template"))

//  设置模板存放地址
app.set("views","templates")

//  设置模板默认后缀
app.set("view engine","art")

app.get("/",(req,res)=>{
    res.render("index",{data:"data"})
})

app.listen(80)

app.locals公共数据