Javascript app.js中的我的JSON.parse无法正常运行
app.js:Javascript app.js中的我的JSON.parse无法正常运行,javascript,node.js,google-maps,express,google-api,Javascript,Node.js,Google Maps,Express,Google Api,app.js: const express = require("express"); const https = require("https"); const app = express(); const port = 3000; app.get("/",function(req,res){ const url ="https://maps.googleapis.com/maps/api/geocode/jsonaddress=1600+Amphitheatre+Parkway,+M
const express = require("express");
const https = require("https");
const app = express();
const port = 3000;
app.get("/",function(req,res){
const url ="https://maps.googleapis.com/maps/api/geocode/jsonaddress=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY;
console.log(response.statusCode);
response.on("data",function(data){
var jatin=JSON.parse(data);
console.log(jatin);
})
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
控制台上的错误
app.listen(3000,function(){console.log(“服务器在端口上启动
3000“;})
服务器已在端口3000上启动200未定义:26
“长名称”
SyntaxError:JSON输入意外结束
在JSON.parse()处
在收到消息时。(/home/jatin/Downloads/full_stack/Web Development/maps/app.js:11:21)
在IncomingMessage.emit(events.js:189:13)
在IncomingMessage.Readable.read(_stream_Readable.js:487:10)
在流程中(_stream_readable.js:931:34)
在resume上(_stream_readable.js:912:3)
在进程中。_tickCallback(internal/process/next_tick.js:63:19)[nodemon]应用程序崩溃-在启动前等待文件更改
当我在浏览器上运行时,输出是可见的,但在控制台上它会抛出一个错误。
由于某些原因,JSON.parse()无法按预期工作
我正在尝试进行一个地理编码API调用,作为响应,它给了我一个JSON输出。。。
当我在浏览器上输入它作为URL时,会收到预期的输出
但是当app.js在node express服务器上运行时,当我点击localhost:3000时,我得到了控制台错误
显然,JSON.parse(“数据”)正在工作,但意外停止。这会导致错误。您需要让代码在
end
事件上执行JSON.parse,如下示例所示:
请注意,这是,但对于应该是相同的,因此在您的代码中('data')上的应该在对其执行JSON.parse()之前用于组装块
const express = require("express");
const https = require("https");
const app = express();
const port = 3000;
app.get("/", function(req, res) {
const url = "API_URL";
https.get(url, function(response) {
console.log(response.statusCode);
let body = "";
response.on("data", function(data) {
body += data;
});
response.on("end", function() {
console.log(JSON.parse(body));
});
});
res.end("End data response");
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
基本上,.on('end',callback')
和.on('data',callback')
是数据
接收和请求
事件的事件侦听器,并且能够在使用http时处理节点中的请求响应.get
您必须在data
事件上附加一个事件侦听器,该事件在您的请求每次收到请求响应块时都会被调用,并且一旦服务结束请求,将调用事件end
,声明请求结束后没有来自服务器的更多数据
如合同所述:
由于某些原因,回调必须注意使用响应数据
在http.ClientRequest部分中说明
您需要让您的代码在end
事件上执行JSON.parse,如下示例所示:
请注意,这是,但对于应该是相同的,因此在您的代码中('data')
上的应该在对其执行JSON.parse()之前用于组装块
const express = require("express");
const https = require("https");
const app = express();
const port = 3000;
app.get("/", function(req, res) {
const url = "API_URL";
https.get(url, function(response) {
console.log(response.statusCode);
let body = "";
response.on("data", function(data) {
body += data;
});
response.on("end", function() {
console.log(JSON.parse(body));
});
});
res.end("End data response");
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
基本上,.on('end',callback')
和.on('data',callback')
是数据
接收和请求
事件的事件侦听器,并且能够在使用http时处理节点中的请求响应.get
您必须在data
事件上附加一个事件侦听器,该事件在您的请求每次收到请求响应块时都会被调用,并且一旦服务结束请求,将调用事件end
,声明请求结束后没有来自服务器的更多数据
如合同所述:
由于某些原因,回调必须注意使用响应数据
在http.ClientRequest部分中说明
您可以添加响应数据结构吗?流中的每个块都会触发“数据”。您必须收集所有块,然后将它们组合到整个响应中,然后对其调用JSON.parse
。或者使用支持解析流的库(例如,fetch
)response.on(“数据”),function(data){var jatin=JSON.parse(data);console.log(jatin);---------------------------------------------------------------------------------------------------------------这就是我正在做的…在var Jatintry日志数据中收集整个响应流,而不使用JSON.parse共享日志,响应m可能不是有效的可解析JSON。请在问题本身中添加记录的数据。这将有助于调试。能否添加响应数据结构?“数据”为流中的每个区块触发。您必须收集所有区块,然后将它们组合到整个响应中,然后对其调用JSON.parse
。或者使用支持解析流的库(例如fetch
)response.on(“数据”,函数(数据){var jatin=JSON.parse(data);console.log(jatin);---------------------------------------------------------------------------------------------------------------这就是我正在做的…在var Jatintry日志数据中收集整个响应流,而不使用JSON.parse共享日志,响应m可能不是有效的可解析JSON。请在问题本身中添加记录的数据。这将有助于调试。如果代码有效^^理解概念。感谢您的努力。感谢。response.on(“数据”,函数(数据){body+=data;
完成任务。很高兴提供帮助:)response.on(“结束”,函数(){console.log(JSON.parse(body));});})
您能否更清楚地解释此代码,并提及response.on(“end”,function()中的end
兄弟,我想从中间而不是响应结束数据中选取内容。那么你能相应地更新答案吗?感谢不断的帮助。我更新了我的答案,以解释。在('end')
,“我想从中间而不是响应结束数据中选取内容”我不明白你想要什么,你不能这么做,因为请求应该在你对它进行JSON.parse之前结束,妈