express 基本使用 (一)

185 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

我们处理请求时使用的是 node 的 http 模块,使用时会有一些问题导致开发比较的繁琐。

  1. 要根据不同的请求路径和不同的请求方法做不同的事情,处理起来比较复杂。
  2. 读取请求体和写入响应体是通过流的方式,比较麻烦。

一般为了方便我们的项目开发,会使用到第三方库:express、koa2。express 的生态是比 koa2 更好一些,从技术的先进性,api的友好性 koa2 更好一些。

搭建应用

npm i express 安装 express库,用 express 开启服务

const express = require("express");
const http = require("http");
const app = express()// 创建一个express应用
// app实际上是一个函数,用户处理请求

const server = http.createServer(app);

server.listen(8081, ()=>{
    console.log("server listening 8081");
})

之后的请求会交给 app 函数来进行处理,可以根据配置将不同的请求方法放入不同的函数中处理。

const express = require("express");
const app = express()// 创建一个express应用
// app实际上是一个函数,用户处理请求

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

我们直接使用 app 来监听端口,实际效果是一样的。模拟 listen 函数

    function listen(port, callback){
        const http = require('http');
        http.createServer(this).listen(port, callback)
    }
// 配置一个请求映射
// app.请求方法("请求路径", 处理函数)
app.get("/abc", (req, res)=>{
    
})

// 也可以填写一个动态路由
app.get("/abc/:id", (req, res)=>{
    // req 和 res 是被 express 封装后的对象
    // 获取请求信息
    const reqHeaders = req.headers; // 获取请求头对象
    const reqPath = req.path; // 获取请求路径
    const reqQuery = req.query; // 获取请求参数
    const params = req.params; // 获取动态信息
})
app.get("/abc/:id", (req, res)=>{
    // req 和 res 是被 express 封装后的对象
    // 响应
    
    // 设置响应头
    res.setHeader("a",123)
    res.send("<h1>hello</h1>");
})

响应会根据传入的格式自动设置响应头 Content-Type。

app.get("/abc/:id", (req, res)=>{
    // 重定向
    res.status(302).header("location", "https://www.juejin.cn").end();
    })
    
    // 简写
    res.status(302).location("https://www.juejin.cn").end();
    
    res.redirect("https://www.juejin.cn", 302);

REST

对于一个资源我们用不同的方法对请求进行处理

通过 REST 可以规范化我们的接口路径和接口方法,方便我们的接口管理。

  • /api/student post 添加学生
  • /api/student/:id get 获取学生
  • /api/student put 修改学生
  • /api/student/delete 删除学生

也可以采用地址栏传参,query的风格。