Express

路由中间件 + 回调函数快捷实现NodeJs开发

Posted by page on June 29, 2020

Express

官网 : https://expressjs.com/zh-cn/

引入

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

创建服务

// "/"标表示对根路径处理  
app.get("/",(req,res) => {
    res.send("express success");//send返回消息  
}).listen(80,() => {
    console.log("running");
});

托管资源

//"src"为静态资源根目录,"source"为虚拟路径,即虚拟的访问路径
let server = app.use("/source",express.static("src"));
server.listen(80,() => {
    console.log("running");
})
// 此时访问路径为"192.168.3.7/source/index.html"

路由分发

// 处理所有路由的请求
app.use((req,res) => {
    res.send("success")
});
// 路由分发处理
app.post/delete/put/get("/",(req,res) => {
    let query = req.query; //获取get参数串对象
    res.send("method : POST/DELETE/PUT/GET")
});

express中间件

服务器响应客户端中间需要经历多个中间环节,如”记录访问时间”,”记录访问日志”,”记录访问量” 每个中间环节就是一个中间件,中间件本质是函数处理,Express程序就是中间件+路由

中间件规则

  • 中间件函数适用的http方法:”get”,”post”,”delete”,”put”,”use”
  • 中间件请求的适用的路径:”/”根目录,省略该参则适用所有路径
  • 中间件函数 (req,res,next) => {…}
  • 中间件回调自变量:next,使其它中间件可继续使用req与res
  • 中间件仅在特点的路由服务进行处理,
  • 不同路由之间公共中间件需使用use以及忽略路径参数(此时为应用中间件)

中间件分类

应用层中间件

app.use((req,res,next) => {//使用use挂载
    console.log("first post中间件处理环节");
    next();//调用下一个中间件函数
});

路由器层中间件

app.post/get/delete/put("指定路径",(req,res,next) => {
    console.log("first中间件处理环节");
    next();//执行下一个路由中间件
    //传入参数"route"则直接跳入下一个单独的路由中间件不执行当前中间件的剩余处理
},(req,res,next) => {
    console.log("second中间件处理环节");
    next();//调用下一个特点路由中间件
});
//分离处理函数:app.post("路径",[fnc1,fnc2,fnc3...]);

错误处理中间件

app.use((error,req,res,next) => {
    error错误处理
});

内置中间件

//express.static()静态托管中间件
app.use("/source",express.static("src"));
app.listen(80,() => {
     console.log("running");
 })

第三方中间件

cookie-parser(cookie处理), body-parser(post参数处理)

const bodyParser = require("body-parser");//安装并引入该中间件
app.use(bodyParser.urlencoded({extended : false}));//挂载第三方中间件
//当post参数为json串时,使用中间件此方法解析json为obj
//app.use(bodyParser.json());
app.post("/login",(req,res) => {
    let data = req.body;//该中间件功能:获取post参
    res.send(data.user + ":" + data.pswd);
}).listen(3000,() => {
    console.log("running");
})

模板引擎使用

  1. 基于express方式引入express-art-template(此版本基于art-template)

    const template = require('art-template');
    app.engine('art',require('express-art-template'));//"art"为模板关键字
    
  2. 与express支持的其他模板步骤一样,分别初始化模板文件路径与声明模板引擎关键字

    app.set('views',"./src")//此处为src路径
    app.set('view engine','art')//设置要使用的模板引擎,"art"为模板关键字
    
  3. res.render调用已初始化的模板渲染功能并返回客户端

    app.get('/', (req, res) => {
        res.render('index.art', {//参数为模板文件名与数据对象
            title : "测试tempalte模板",
            list : ["v1","v2","v3"]
        });
    }).listen(3000,() => {
        console.log("running");
    })
    

Request请求

req.get(field) 获取请求头header的字段值

Response响应

res.set(field, value) 设置响应头header的字段值

res.download() 提示将要下载文件

res.end() 结束响应进程

res.json() 发送 JSON 响应

res.jsonp() 在 JSONP 的支持下发送 JSON 响应,默认回调函数参数的键为callback

res.redirect() 重定向请求

res.render() 呈现视图模板

res.send() 发送各种类型的响应

res.sendFile() 以八位元流形式发送文件

res.sendStatus() 设置响应状态码并以响应主体形式发送其字符串表示