【问题标题】:Nodejs get request reading body dataNodejs获取请求读取正文数据
【发布时间】:2019-10-22 03:58:34
【问题描述】:

这是我从请求中得到的示例响应

ill show you what an actual request looks like ```
#EXTM3U
#EXT-X-INFO:NODE="video-edge-c2b07c.dfw02",B="false",MANIFEST-NODE-TYPE="weaver_cluster",MANIFEST-NODE="video-weaver.dfw02",SUPPRESS="true",SERVER-TIME="1571716283.0",TRANSCODESTACK="2017TranscodeQS_V2",USER-IP="38.131.137.53",SERVING-ID="614d6b4085434f49beeb41fb36326bf6",CLUSTER="dfw02",ABS="false",VIDEO-SESSION-ID="8194286829451308751",BROADCAST-ID="36033077616",STREAM-TIME="38185.0027399",FUTURE="true",USER-COUNTRY="US",MANIFEST-CLUSTER="dfw02"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="chunked",NAME="720p (source)",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3625644,RESOLUTION=1280x720,CODECS="avc1.64001F,mp4a.40.2",VIDEO="chunked",FRAME-RATE=30.000
https://url.com.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="720p30",NAME="720p",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2378938,RESOLUTION=1280x720,CODECS="avc1.4D401F,mp4a.40.2",VIDEO="720p30",FRAME-RATE=30.000
https://url.com.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="480p30",NAME="480p",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1433938,RESOLUTION=852x480,CODECS="avc1.4D401F,mp4a.40.2",VIDEO="480p30",FRAME-RATE=30.000
https://url.com.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="360p30",NAME="360p",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=630000,RESOLUTION=640x360,CODECS="avc1.4D401F,mp4a.40.2",VIDEO="360p30",FRAME-RATE=30.000
https://url.com.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="160p30",NAME="160p",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=230000,RESOLUTION=284x160,CODECS="avc1.4D401F,mp4a.40.2",VIDEO="160p30",FRAME-RATE=30.000
https://url.com.m3u8

我将如何提取底部的 url 这只是实际请求正文中的一个示例,返回它包含多个 url。

【问题讨论】:

  • 是什么格式的??
  • 您是在问返回的正文是什么格式的?
  • 是的,它是否是 JSON??
  • 不,这不是 json 问题
  • 那么它是什么格式?如果是纯文本,那么你必须进行字符串操作才能得到它

标签: node.js get request


【解决方案1】:

您可以通过正则表达式搜索并找到匹配的格式:

const urlRegex =/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/ig

// responseBodyText from the response you get
const matchedUrls = responseBodyText.match(urlRegex);

const extractedUrls = matchedUrls ? matchedUrls : []
// it should prints the all the urls on the response if there is any or empty array if not

您的示例示例:

【讨论】:

  • 所以一个问题我怎样才能修复这些错误,有时它会返回为 url:matchedUrls[1] ^ TypeError: Cannot read property '1' of null or this cannot read type match of undefined let mappedUrls = body.match(urlRegex);
  • 你可以检查matchedUrls,如果它的值是null,这意味着响应中没有url(只是if语句),请检查答案更新
  • 好的,它修复了 null 但这又是什么,这就是我现在得到的让 matchUrls = body.match(urlRegex); ^ 类型错误:无法读取未定义的属性“匹配”
  • 耶!现在需要检查 body ,所以 .match 存在于 String Prototype 对象上,只需检查 body 是一个字符串并处理流程
  • 在body到达这个阶段之前你应该有一个验证层!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2013-12-31
  • 1970-01-01
  • 2018-04-06
  • 2018-06-07
相关资源
最近更新 更多