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,+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.listent(3000,function(({console.log((服务器在端口上启动3000"(;}(
服务器在端口3000 200上启动未定义:26"long_name">
SyntaxError:JSON输入意外结束位于JSON.parse((在IncomingMessage。(/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在nodeexpress服务器上运行时,当我访问localhost:3000时,我会收到控制台错误
显然JSON.parse("data"(正在工作,但意外停止。这会导致错误。
您需要有代码来对end
事件执行JSON.parse,就像文档中的这个例子一样:
http.get('http://nodejs.org/dist/index.json', (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
if (statusCode !== 200) {
error = new Error('Request Failed.n' +
`Status Code: ${statusCode}`);
} else if (!/^application/json/.test(contentType)) {
error = new Error('Invalid content-type.n' +
`Expected application/json but received ${contentType}`);
}
if (error) {
console.error(error.message);
// Consume response data to free up memory
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
console.log(parsedData);
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
注意,这是http.get,但https.get应该是一样的,所以在代码中,在对其执行JSON.parse()
之前,应该使用on('data')
来组装块。
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')
是data
接收和请求end
事件的事件侦听器,并且在使用http(s).get
时,为了能够在节点中处理您的请求-响应,您必须在data
事件上附加一个事件侦听器,并且一旦该请求由该服务结束,则将调用事件CCD_。
如文件中所述:
回调必须注意使用响应数据,原因如下如http所述。ClientRequest部分。