nodejs核心模块 http模块 ---接口

编程入门 行业动态 更新时间:2024-10-28 19:25:31

nodejs核心<a href=https://www.elefans.com/category/jswz/34/1771428.html style=模块 http模块 ---接口"/>

nodejs核心模块 http模块 ---接口

nodejs核心模块 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

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

目标

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

使用postman软件进行测试。

目录结构

|-db
|---data.json # 数据
|-server.js # 你的代码

参考代码

// server.js
const http = require('http');
const app = http.createServer((req, res) => {if (req.url === '/getmsg' && req.method=== 'GET') {const filePath = path.join(__dirname, 'db', 'data.json')let const = fs.readFileSync(filePath, 'utf8')res.end(const);} else {res.end('error');}
});
app.listen(8083, () => {console.log(8083);
});

说明:

  • 注意:类型
  • req.method可以判断请求的类型
  • res.end()的参数只能是字符串(或者是buffer),而不能是对象

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

目标

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

使用postman软件进行测试。

目录结构

|-db
|---data.json # 数据
|-server.js # 你的代码

参考代码

const fs = require('fs')
const path = require('path')
const http = require('http')
const qs = require('querystring')http.createServer((req, res) => {// get请求带参数let [url, queryStr] = req.url.split('?');   //通过请求体 拿到url路径 用?分割成数组 结构赋值给 url 和 queryStrlet qsObj = qs.parse(queryStr);             //使用核心模块querystring 分割查询字符串let filePath = path.join(__dirname, 'db', 'data.json');         //拼接一个data.json的绝对路径if (url === '/getList' && req.method === 'GET') {           //如果请求的路径是/getList 请求类型是getlet arr = JSON.parse(fs.readFileSync(filePath));        //拿到data.json的内容 解析成数组let rs = arr.find(item => {                             //对数组进行查找 如果找到返回ture 没有找到返回falseif (item.id == qsObj.id) {return true;} else {return false}})console.log(rs);res.setHeader('content-type', 'application/json')res.end(JSON.stringify(rs))             //结束响应 响应体内容为拿到的返回值} else {res.statusCode = 404;res.end('404')}}).listen(3000, () => {console.log('服务器开启 3000');
})

16.post接口

目标

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

使用postman软件进行测试。

预备知识

post类型与get类型的接口区别较大,主要在两个方面:

  1. 类型不同: 可以通过req.method 来获取(GET,POST)
  2. 传参不同
    • get请求参数在请求行中(附加在url后面),内容比较少。
    • post请求参数在请求体中。内容比较大。

对于获取post参数就相对复杂一些。它的特点是:

  1. 参数在请求体中发给后端
  2. 后端是一段一段接收数据的,并不像get在请求行中传递的数据:直接写在url中的查询字符串内,可以立即通过req.url来解析出来。
  3. 在接收参数的过程中,会涉及req对象的两个事件data,end
    • data事件,每次收到一部分参数数据就会触发一次这个事件。
    • end事件,全部的参数数据接收完成之后会执行一次。

基本流程

  1. 定义一个空容器result来装参数。
  2. req对象上监听data事件。这个事件触发一次,就把当次收到的数据向result中填充一些。
  3. 在req对象上监听end事件。这个事件触发时,就表示整个参数数据接收完成,此时取出容器result中的内容,进行解析,以取出参数。

参考代码

// 实现post接口
const http = require('http');
const qs = require('querystring')const server = http.createServer((req,res)=>{if(req.url === '/add' && req.method === "POST"){// data事件// 当收到一部分数据之后,就会执行一次回调函数,可能会执行多次// 并且回调中的参数就是本身收到的这一部分数据(buffer格式)let result = "";req.on('data',function(rs){console.log('服务器收到了post的一部分数据:');console.log(rs);result += rs; // 会自动把buffer转成字符串})// end事件// 服务器接收post参数完毕之后,就会执行回调函数,req.on('end',function(){console.log('服务器接收post参数完毕');// 最终得到的是一个查询字符串 a=1&b=2// 把查询字符串转成对象?使用queryString模块let obj = qs.parse( result );// 把值保存到db.json中})} else {res.end('error')}
})server.listen(8000,()=>{console.log(8000);
})

在发post请求时,传递的数据会在请求体中,它也是字符串格式,并且是一点一点上传到web服务器的(是积小成多,而不是一蹴而就)每上传一部分就会触发data事件,而最后全部上传完成之后,会触发end事件。

下面是一个示例代码,用来模拟使用post请求发送大量的数据,以观察req.on('data', chunk => {})多次触发的现象。

var xhr =new XMLHttpRequest();
xhr.open('post','http://localhost:8080/post');
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
xhr.send("name="+"imissyou".repeat(100000));

更多推荐

nodejs核心模块 http模块 ---接口

本文发布于:2023-07-28 18:41:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1277594.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模块   接口   核心   nodejs   http

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!