一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
我们处理请求时使用的是 node 的 http 模块,使用时会有一些问题导致开发比较的繁琐。
- 要根据不同的请求路径和不同的请求方法做不同的事情,处理起来比较复杂。
- 读取请求体和写入响应体是通过流的方式,比较麻烦。
一般为了方便我们的项目开发,会使用到第三方库: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的风格。