美文网首页
Express API 总结

Express API 总结

作者: Jason_Shu | 来源:发表于2022-05-22 15:00 被阅读0次

    本文以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 总结

          本文链接:https://www.haomeiwen.com/subject/tfvkprtx.html