从云端function获取随机维基页面
我试图通过Google Cloud Functions在他们的API上获得一个随机的Wikipedia页面。 维基百科API工作正常。 这是我的要求:
https://de.wikipedia.org/w/api.php?action=query&format=json&generator=random
对于testing,您可以将格式更改为jsonfm,以查看浏览器中的结果。 点击这里 👍。
但是,即使在请求完全成功之前,我的函数似乎也被破坏了。 如果我想parsing数据(或者即使我想logging这些数据),我得到了一个
SyntaxError: Unexpected end of json
日志看起来像(例如)(不,我没有自己削减):
DATA:ue ||“}”query“:{”pages“:{”2855038“:{”pageid“:2855038,”ns“:0,”title“:”Thomas Fischer
当然,这不是一个有效的JSON,不能被parsing。 不pipe这是我的function:
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(); };
我已经试过在这里返回一些东西。 像那个video解释。 但是,当我看着节点文档https.request
不返回一个Promise
。 所以回报这是错误的。 我也尝试将on('data', callback)
提取到它自己的function
以便我可以返回callback
。 但是我也没有成功。
如何看看我的function,它返回我的预期:
{“title”:“随机维基百科页面标题”}
?
我相信你的json
是以大块stream的forms出现的。 您正试图parsing返回的第一个数据块。 尝试像这样:
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(); };
- 节点JS AWS S3file upload。 如何获得公共URL响应
- expressionjs错误:“明确反对res.sendfile:使用res.sendFile”
- 为什么我的中间件不检查电子邮件是否已经存在?
- 如何保护/ admin下的路由,何时get / admin /不pipe检查login状态
- Node.js和underscore.js – 模板
- 将数据从POST路由传递到模板
- 如何使用用户input的关键字在Node.js中执行Twitter APIsearch
- 如何在NodeJS应用程序的服务器端使用JavaScript库,以便在客户端上运行?
- 使用Node.js / promisses按types捕获exception