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");
})
模板引擎使用
-
基于express方式引入express-art-template(此版本基于art-template)
const template = require('art-template'); app.engine('art',require('express-art-template'));//"art"为模板关键字
-
与express支持的其他模板步骤一样,分别初始化模板文件路径与声明模板引擎关键字
app.set('views',"./src")//此处为src路径 app.set('view engine','art')//设置要使用的模板引擎,"art"为模板关键字
-
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()
设置响应状态码并以响应主体形式发送其字符串表示