博客
关于我
nodejs核心模块 http模块 ---接口
阅读量:267 次
发布时间:2019-03-01

本文共 3656 字,大约阅读时间需要 12 分钟。

Node.js 核心模块 http 模块 — 接口

13. 理解静态资源与接口的区别

服务器上有许多资源,每个资源都有自己的 URL。客户端浏览器想要访问某个资源,就需要向服务器发起对应的请求。静态资源和接口是服务器处理请求的两种主要方式。

13.1 资源的分类

静态资源

  • 它们通常以文件形式存在,例如 index.html, style.css, index.js 等。
  • 处理静态资源时,服务器直接读取资源文件内容并返回给客户端浏览器。

动态资源(接口)

  • 它们不是以具体文件形式存在的,而是服务器上的代码段。
  • 当接口被调用时,服务器会执行这段代码并将结果返回给客户端浏览器。
13.2 发送请求的途径
  • 在地址栏中直接访问 URL。
  • 通过 <a> 标签进行跳转。
  • 通过表单提交。
  • 通过 AJAX 技术访问 URL。
13.3 请求的类型
  • GET:在地址栏中直接访问 URL 即可使用 GET 方式。静态资源通常使用 GET 请求。
  • POST:通过表单提交,设置 formmethod 为 POST。
  • DELETE, PUT, PATCH, OPTIONS:这些方法通常用于动态资源或 API 接口。

14. 写一个不带任何参数的 GET 类型接口

目标:提供一个名为 getList 的接口 (http://localhost:8083/getList),以 JSON 字符串格式返回 db/data.json 的内容。

目标
  • 使用 Postman 测试接口。
  • 接口路径:http://localhost:8083/getList
  • 返回 db/data.json 的内容。
代码示例
const http = require('http');const fs = require('fs');const path = require('path');const server = http.createServer((req, res) => {    if (req.url === '/getList' && req.method === 'GET') {        const filePath = path.join(__dirname, 'db', 'data.json');        const data = fs.readFileSync(filePath, 'utf8');        res.setHeader('Content-Type', 'application/json');        res.end(JSON.stringify({ list: JSON.parse(data) }));    } else {        res.statusCode = 404;        res.end('错误的路径');    }});server.listen(8083, () => {    console.log('服务器运行在 8083 端口上');});
说明
  • 使用 req.urlreq.method 判断请求路径和类型。
  • res.end() 的参数只能是字符串或 Buffer 对象。
  • JSON.stringify 用于将数据转换为 JSON 字符串格式返回。

15. 带参数的 GET 请求 — 获取查询字符串中的数据

目标:提供一个名为 getList 的接口 (http://localhost:8083/getList?name=xxxx),以 JSON 字符串格式返回 db/data.json 中名称为 xxxx 的数据。

代码示例
const http = require('http');const fs = require('fs');const path = require('path');const querystring = require('querystring');const server = http.createServer((req, res) => {    if (req.url === '/getList' && req.method === 'GET') {        const [url, queryStr] = req.url.split('?');        const queryObj = querystring.parse(queryStr);        const filePath = path.join(__dirname, 'db', 'data.json');        const data = fs.readFileSync(filePath, 'utf8');        const list = JSON.parse(data);        const result = list.find(item => item.id === queryObj.id);                if (result) {            res.setHeader('Content-Type', 'application/json');            res.end(JSON.stringify(result));        } else {            res.statusCode = 404;            res.end('未找到对应数据');        }    } else {        res.statusCode = 404;        res.end('错误的路径');    }});server.listen(3000, () => {    console.log('服务器运行在 3000 端口上');});
说明
  • 使用 querystring 模块解析查询字符串。
  • 通过 find 方法查找数据库中符合条件的数据。
  • 返回结果以 JSON 格式响应。

16. POST 接口

目标:提供一个名为 add 的接口 (http://localhost:8083/add),以 POST 请求方式传入 name 值,将数据保存到 db/data.json 中。

代码示例
const http = require('http');const querystring = require('querystring');const server = http.createServer((req, res) => {    if (req.url === '/add' && req.method === 'POST') {        let result = '';        req.on('data', (chunk) => {            result += chunk;        });        req.on('end', () => {            const parsedData = querystring.parse(result);            const filePath = path.join(__dirname, 'db', 'data.json');            const data = fs.readFileSync(filePath, 'utf8');            const list = JSON.parse(data);            list.push(parsedData);            fs.writeFileSync(filePath, JSON.stringify(list, null, 2));                        res.setHeader('Content-Type', 'application/json');            res.end({ message: '数据已添加', data: parsedData });        });    } else {        res.statusCode = 404;        res.end('错误的路径');    }});server.listen(8000, () => {    console.log('服务器运行在 8000 端口上');});
说明
  • 使用 req.on('data')req.on('end') 接收 POST 请求参数。
  • querystring 模块用于解析 POST 请求体中的查询字符串。
  • 数据保存到文件中时使用 fs.writeFileSync,以保持数据的一致性。

转载地址:http://fdca.baihongyu.com/

你可能感兴趣的文章
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
NFinal学习笔记 02—NFinalBuild
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS网络文件系统
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
ng 指令的自定义、使用
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx Location配置总结
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
Nginx 反向代理解决跨域问题
查看>>