express 初步认知

express 初探

起始

npm i express // 安装

// 方式 1 -- 配合 http 模块使用
const express = require('express');
const http = require('http');
const app = express(); // 创建一个 express 应用
// app 实际是一个函数,用于处理请求的函数
const server = http.createServer(app);
const port = 9999;
server.listen(port, () => console.log(`server listening on ${
     port}...`));

// 方式 2
const express = require('express');
const app = express(); // 内部使用了 http 模块
const port = 9999;
app.listen(port, () => console.log(`server listening on ${
     port}...`));

配置

// 根据不同的配置,交给不同的处理函数进行处理
const express = require('express');
const app = express();

// 配置一个请求映射,如果请求方法和请求路径均满足匹配,就交给对应的处理函数进行处理
// app.请求方法("请求路径", 处理函数);
app.get('./news/:id', (req, resp) => {
   
    // req 和 resp 是经过 express 封装过后的请求 / 响应对象
    console.log(req.headers); // 获取请求头
    console.log(req.path); // 获取请路径
    console.log(req.query); // 获取查询值,并封装成对象
    console.log(req.params); // 获取动态路径值 如请求路径是 ./news/9527  => { id: '9527' }

    // 响应
    resp.send(); // 响应结果,内部会调用 end
    /**
     * send 里是字符串 -> 自动设置 Content-Type: text/html
     * 若是数组或对象什么的内容,则会设置 Content-Type: application/json
    */

    resp.setHeader(); // 手动设置响应头
    resp.status(302).header('location', "https://www.baidu.com").end(); // 设置状态码,重定向到百度
    // 语法糖 - 简化上句代码
    resp.status(302).location("https://www.baidu.com").end();
    // 或
    resp.redirect(302, "https://www.baidu.com"); // 默认 301 永久重定向
});

app.get("*", (req, res) => {
    // 匹配所有路径的 get 请求
    // ...
});

REST API

摘自 → 简书

  1. api 与用户的通信协议,总是使用 HTTPS 协议以保证数据传输的安全性。

  2. 应该尽量将 api 部署在专用域名之下 - https://api.xxx.com

  3. 如果 api 很简单,不会有进一步的扩展,可以放在主域名之下 - https://xxx.com/api/

  4. 应该将 api 的版本号放入 url - https://api.xxx.xom/version1/
    另一种做法是将版本号放入 http 头信息之中,但不如在 url 中直观

  5. 路径(EndPoint) - 表示 api 的具体网址。

    • 在 RESTful 架构中,每个网址代表一种资源(resource),所以网址中只能有名词,而且名词往往对应数据库表。所以 api 中的名词一般使用复数名词。

    • 对于资源的具体操作类型,由 http 动词表示(常用的有下面 5 个):

      GET (SELECT) ------- 从服务器取出资源(一项或多项)。
      POST(CREATE) ----- 在服务器新建一个资源。
      PUT(UPDATE) ------ 在服务器更新资源(客户端提供改变后的完整资源)。
      PATCH(UPDATE) ---- 在服务器更新资源(客户端提供改变的属性)。
      DELETE(DELETE) — 从服务器删除资源。
      以及两个不常用的 http 动词 – HEAD / OPTIONS

      例如:

      统一的 api 接口,通过不同的请求方法完成操作
      /api/student ----------- post ---------- 添加学生
      /api/student ----------- get ----------- 获取学生信息
      /api/student/:id ------- get ----------- 获取某个学生信息
      /api/student ----------- put ----------- 修改学生信息
      /api/student/:id ------- put ----------- 修改某个学生信息
      /api/student ----------- delete -------- 删除学生
      … 依次类推

  6. 过滤信息

    如果存在数据量很大,不可能全部返回给客户端。所以通过 api 提供参数,过滤结果

    ?limit=10 -------------- 指定返回 10 条数据
    ?offset=10 ------------- 指定跳过 10 条
    ?page=x&per_page=y ----- 指定第 x 页,及每页数据量
    … 以及一些其他筛选条件

    参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如:
    GET /zoo/ID/animalsGET /animals?zoo_id=ID 的含义是相同的。

  7. 状态码: 服务器向用户返回的状态码和提示信息(常见的 200, 301, 302, 400, 403, 404, 500等)

  8. 错误处理:状态码是 4xx,就应该向用户返回错误信息。

  9. 返回结果:针对不同的操作,服务器向用户返回的结果应该符合以下规范:

    GET ------ /collection:返回资源对象的列表(数组)
    GET ------ /collection/resource:返回单个资源对象
    POST ----- /collection:返回新生成的资源对象
    PUT ------ /collection/resource:返回完整的资源对象
    PATCH ---- /collection/resource:返回完整的资源对象
    DELETE — /collection/resource:返回一个空文档

  10. Hypermedia api: 即返回结果中提供链接,连向其他 api 的方法,使用户不用去查文档。

  11. 服务器返回的数据格式,应尽量使用 json,避免使用 xml

nodemon

它是一个监视器,用于监控工程中的文件变化,如果发现文件有变化,可以执行一段脚本。(node 环境下就可以使用)
即之前更改文件后,需要停掉程序,重新跑一遍;用它可以帮我们省去这一步:
但同时,它会监听任何文件的变更(比如 package.json 更改也会让它重新运行),所以可以配置一个 nodemon.json

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值