博客
关于我
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:通过表单提交,设置 form 的 method 为 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.url 和 req.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/

你可能感兴趣的文章
python3简单使用requests 用户代理,cookie池
查看>>
Python3组播通信编程实现教程(发送者+接收者)
查看>>
Python3编写网络爬虫10-数据存储方式三-CSV文件存储
查看>>
python3读取redis返回数据带有'b'的问题
查看>>
Python3连接MySQL
查看>>
Python关于isinstance函数的解析 | 附Demo(全)
查看>>
Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
查看>>
python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
查看>>
python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
查看>>
Python: AES加密与解密
查看>>
Python: Range() 最大尺寸;动态的还是静态的?
查看>>
Python: Windows下用 multiprocessing 的深坑
查看>>
python:Could not find platform independent libraries <prefix>解决方法
查看>>
Python:datetime tzinfo 时区名称文档
查看>>
Python:deepcopy(list) vs new_list = old_list[:]
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>
Python:TypeError:无法连接“str“和“int“对象
查看>>
Python:XPath 在 ElementTree 中不可用
查看>>