express相关api介绍
express.json
这是一个express 中间件的功能,主要作用处理请求中的json数据,并挂载在body中。
import * as express from "express";
const app = express();
app.use(express.json()); // 解析请求中的 json 数据
app.use((request, response, next) => {
response.send(request.body);
});
app.listen(3000, () => {
console.log("监听成功");
});
如果不使用中间件的话,需要自己去处理请求中的json数据,通过监听request的data和end事件,得到完整的请求数据。
import * as express from "express";
const app = express();
app.use((request, response, next) => {
const data = [];
request.on("data", (chunk) => {
data.push(chunk);
});
request.on("end", () => {
response.send(JSON.parse(data[0].toString()));
});
});
app.listen(3000, () => {
console.log("监听成功");
});
express.urlencoded
处理x-www-form-urlencoded形式的请求
这个格式的数据会被编码成以"&"分隔键-值对,同时以"="分隔键和值,比如name=zhangsan&age=18
express.static
设置一个静态目录,当访问资源的时候,会去这个静态目录中找对应的资源
import * as express from "express";
const app = express();
app.use(express.static("public")); // 设置静态资源目录
app.use((request, response, next) => {
response.send(request.body);
});
app.listen(3000, () => {
console.log("监听成功");
});
静态资源目录
public
--home.html
--about.html
当浏览器访问 /home.html时,会去自动匹配public/home.html文件,并将它返回给前端。
app相关api介绍
app.locals
设置本地变量,在整个应用中都是可以访问的。
app.locals.name = "张三";
console.log(app.locals.name);
/** 等价于 */
console.log(request.app.locals.name);
app.set/app.get
-
设置任意想要存储的值,和
app.locals类似,在整个应用中都是可以访问的。app.set("name", "zhangsan"); app.get("name"); -
特殊的访问值
-
views:视图全部在public目录中,视图的引擎是pugapp.set("views", "public"); app.set("view engine", "pug");env:设置环境变量etag:设置etag
app.param
用于处理路径中的参数,如果匹配就会执行后面的回调函数。
import * as express from "express";
const app = express();
app.param("id", (req, res, next, id) => {
console.log(id);
next();
});
app.get("/user/:id", (req, res, next) => {
res.send("1");
});
app.listen(3000, () => {
console.log("监听成功");
});
app.route/app.all/app.get/app.post
app
.route("/user")
.all((req, res, next) => {...}) // 处理所有的情况
.get((req, res, next) => {...}) // 处理get请求
.post((req, res, next) => {...}); // 处理post请求
request相关api
request.baseUrl
设置公共的api访问路径
import * as express from "express";
const app = express();
const router = express.Router();
router.get("/jp", (req, res) => {
console.log(req.baseUrl); // /greet
res.send(req.baseUrl);
});
app.use("/greet", router);
app.listen(3000, () => {
console.log("监听成功");
});
request.ip
获取请求ip,不过这个ip不准,只能知道一个大概的范围,比如在一个学校里,你获取到的ip可能都是相同的。
request.params
获取请求路径中的参数
import * as express from "express";
const app = express();
app.use("/greet/jp/:id", (req, res, next) => {
console.log(req.params);
res.send(req.params);
});
app.listen(3000, () => {
console.log("监听成功");
});
request.path
用于获取请求路径,不能在app.use中使用。
import * as express from "express";
const app = express();
app.get("/greet", (req, res, next) => {
console.log(req.path);
res.send(req.path);
});
app.listen(3000, () => {
console.log("监听成功");
});
request.query
用于获取查询参数。
request.xhr
判断请求头X-Requested-With值是不是XMLHttpRequest。
request.acceptsLanguages()
//请求头
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh;q=0.6
//后端可以通过判断当前支持的语言
request.acceptsLanguages() // ['en-GB', 'en-US', 'en', 'zh-CN', 'zh']
request.acceptsLanguages("zh") // zh
request.acceptsLanguages("fr") // false
response相关api
response.format
根据请求头Accept返回对应的内容
import * as express from "express";
const app = express();
app.get("/test", (req, res, next) => {
res.format({
"text/plain": function () {
res.send("hey");
},
"text/html": function () {
res.send("<p>hey</p>");
},
"application/json": function () {
res.send({ message: "hey" });
},
default: function () {
res.status(406).send("Not Acceptable");
},
});
});
app.listen(3000, () => {
console.log("监听成功");
});
response.local
用来重定向,配合状态码301来使用,等同于res.redirect