json - 从云函数获取随机wiki页面

标签 json node.js express google-cloud-platform google-cloud-functions

我尝试通过 Google Cloud Functions 通过他们的 API 获取随机维基百科页面。维基百科 API 运行良好。这是我的要求:

https://de.wikipedia.org/w/api.php?action=query&format=json&generator=random

为了进行测试,您可以将格式更改为 jsonfm,以便在浏览器中查看结果。 Click here 👍.

但似乎我的功能甚至在请求完全成功之前就被破坏了。如果我想解析数据(或者即使我想记录该数据),我会得到一个

SyntaxError: Unexpected end of json

日志看起来像(例如)(不,我没有自己切割它):

DATA: ue||"},"query":{"pages":{"2855038":{"pageid":2855038,"ns":0,"title":"Thomas Fischer

当然,这不是有效的 json,无法解析。不管这是我的职责:

exports.randomWikiPage = function getRandomWikiPage (req, res) {
  const httpsOptions = {
    host: "de.wikipedia.org",
    path: "/w/api.php?action=query&format=json&generator=random"
  };

  const https = require('https');
  https.request(httpsOptions, function(httpsRes) {
    console.log('STATUS: ' + httpsRes.statusCode)
    console.log('HEADERS: ' + JSON.stringify(httpsRes.headers))
    httpsRes.setEncoding('utf8')
    httpsRes.on('data', function (data) {
      console.log("DATA: " + data)
      const wikiResponse = JSON.parse(data);

      const title = wikiResponse.query.title
      res.status(200).json({"title": title})
    });
  }).end();
};

我已经尝试过在这里返回。喜欢that video解释道。但当我查看 Node 文档 https.request 时,不会返回 Promise。所以返回是错误的。我还尝试将 on('data',callback) 提取到它自己的函数中,以便我可以返回callback。但我也没有成功。

如何查看我的函数是否返回我的预期:

{"title": "A random Wikipedia Page title"}

最佳答案

我相信您的 json 是以 block 的形式传输的。您正在尝试解析返回的第一个数据 block 。尝试这样的事情:

  https.request(httpsOptions, function(httpsRes) {
    console.log('STATUS: ' + httpsRes.statusCode)
    console.log('HEADERS: ' + JSON.stringify(httpsRes.headers))
    httpsRes.setEncoding('utf8')
    let wikiResponseData = '';
    httpsRes.on('data', function (data) {
      wikiResponseData += data;
    });
    httpRes.on('end', function() {
      const wikiResponse = JSON.parse(wikiResponseData)
      const title = wikiResponse.query.title
      res.status(200).json({"title": title})
    })
  }).end();
};

关于json - 从云函数获取随机wiki页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44754052/

相关文章:

javascript - json中的eval数据传入jquery

c - AWS IoT - JSON 格式不正确

json - 如何修复预期的启动联合。在命令行上将 JSON 转换为 Avro 时得到 VALUE_NUMBER_INT?

javascript - Node Express 使用单页应用程序提供动态和静态文件

javascript - 使用 res.send 表达 app.param 问题

javascript - 无法使用 express.static 提供 json 文件

java - 如何读取通用列表中的 JSON

javascript - 在 NestJS 中将 Swagger 文档生成为 JSON/YAML

node.js - 使用 express 提供特定的 url

javascript - 如何让sharejs与nodejs一起运行?