Express API 总结

本文以express 4.xx版本为准

express.xxx相关

express.json()

作用:将请求中Content-type为「application/json」类型的请求数据,解析成json

使用PostMan发送Post请求,body内容为一段JSON

image.png
const express = require("express");

const app = express();

app.use((request, response, next) => {
  // 由于请求以流的形式传输,顾最开始此处接收值为空对象
  console.log("request", request.body); // {}
  
  // 以流的形式获得数据
  request.on("data", (chunk) => {
    console.log("chunk::::", chunk.toString()); // 将二进制内容以字符串形式打印
  });
  
  response.send("hi!!!");
  next();
});

app.listen(3000, () => {
  console.log("监听端口3000中...");
});

使用express.json()后

const express = require("express");

const app = express();

app.use(express.json()); // 使用express.json中间件,会将请求库的Json自动处理

app.use((request, response, next) => {
  console.log("request", request.body); // 此处接受的请求体已经为object
  
  // 并且此处并不会接收数据data,也就可以不用写了
  // request.on("data", (chunk) => {
  //   console.log("chunk::::", chunk.toString());
  // });
  
  response.send("hi!!!");
  next();
});

app.listen(3000, () => {
  console.log("监听端口3000中...");
});

express.raw()

作用:将请求体信息解析为「Buffer」

express.text()

作用:将请求体信息转换为「字符串」

express.urlencoded()

作用:将Content-Type为「application/x-www-form-urlencoded」类型(该类型以key=xxx&value=yyy的形式传输)的数据,解析成对象

express.Router()

作用:生成一个路由对象

// app.ts
const express = require("express");

const app = express();

app.get("/admin", (request, response, next) => {
  response.end("这是admin页面");
  next();
});

app.get("/user", (request, response, next) => {
  response.end("这是user页面");
  next();
});

app.listen(3000, () => {
  console.log("监听端口3000中...");
});

如上述代码,当我们设置了「admin」和「user」等多个模块路由时,都会写在一个文件里面,显得比较杂乱。使用express.Router()后可以分模块建路由

// src/admin.ts
const express = require("express");

const router = express.Router();

// 此处其实在请求「/admin」路由的时候,就会命中此处
router.get("/", (request, response, next) => {
  response.end("这里是admin路由的首页");
});

export default router;
// app.ts
import admin from './src/admin';

const express = require('express');

const app = express();

app.get('/admin', admin); // 此处就是将admin的router对象置于/admin路由的处理

app.listen(3000, () => {
  console.log('listening 3000...');
});

express.static()

作用:用于挂载静态资源

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

app.use(express.static("yyy"));

app.use((request, response, next) => {
  console.log(request.body);
  next();
});

app.listen(3000, () => {
  console.log("listening 3000...");
});

当我们将静态资源指定为yyy文件夹后,直接访问「http://localhost:3000」即可显示yyy文件夹下的index.html文件

image.png

app.xxx相关

app.get()

作用:封装对GET请求的处理,也可以获取app.set()设置的值

app.use((request, response, next) => {
  const { method } = request;
  
  // 以往需要根据method字段来判断是否为GET请求
  if (method === "GET") {
    ...
  }
});
  
// 现在可以直接使用app.get来对GET请求处理
app.get('/', (request, response, next) => {
})

app.post(),app.put()等同理

app.set()

作用:设置引擎模板上的属性

app.set('title', 'express');

app.get('title'); // express

app.locals

作用:将某个属性挂载到全局变量上。一旦app.locals设置属性后,该属性会贯穿整个生命周期,

const express = require("express");

const app = express();

app.locals.name = "Jason";

app.get("/", function (req, res) {
  console.log(app.locals.name); // Jason
  res.send("Admin Homepage");
});

app.listen(3000, () => {
  console.log("listening 3000...");
});

request.xxx相关

  • request.hostname

获取「主机名」

// Host: "example.com:3000"
console.dir(req.hostname)
// => 'example.com'
  • request.accepts

检查可接受的请求的文档类型

response.xxx相关

  • response.status

设置响应的状态码

  • response.download

传送指定路径的文件

router相关

可以用router单独抽出一部分路由处理,比如以下router内容是对「user」部分的处理

const express = require("express");

const router = express.Router();

router.get("/", (request, response, next) => {
  response.end("This is index");
});

router.get("/:id", (request, response, next) => {
  response.end("This is id page");
});

router.get("/:id/edit", (request, response, next) => {
  response.end("This is edit page");
});

module.exports = router;
import userRouter from './router/user'; // 将上述处理user部分的路由处理引入

app.use('/user', userRouter); // 路径是/user的时候,采用userRouter的路由处理

你可能感兴趣的:(Express API 总结)