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的路由处理
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容