SyntaxError:IncomingMessage 处 JSON.parse () 处的 JSON 输入意外结束。

2024-03-04

我正在尝试制作一个天气应用程序,并且正在使用天气 API 来获取信息,但是当我尝试解析 JSON 数据时会出现此错误:SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at IncomingMessage.<anonymous>编辑:我需要从 https 请求获取纬度和经度值。我尝试返回它,但它仍然会说 lon 和 lat 未定义。

第二次编辑:如果我输入 lon 和 lat 的值,它将解析数据并发回 JSON,但我需要 https 请求上的 locaionIQ API 的 lon 和 lat 值。我如何获得这些值? 这是代码:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const https = require('https');
const { static, response } = require('express');
require('dotenv').config();


app.use(bodyParser.urlencoded({extended:true}));
app.use(express.static('public'))

app.listen(3000, ()=>{
  console.log("server is running on port 3000")
})

app.get('/', (req,res)=>{
  res.sendFile(__dirname+'/index.html')
})

app.post('/', (req,res)=>{
  
  let apiKeyLocationIQ = process.env.API_KEY_LOCATIONIQ;
  let apiKeyWeather = process.env.API_KEY_WEATHER;
  let cityLocationIQ = req.body.citySearch;
  let urlLocationIQ = "https://api.locationiq.com/v1/search.php?format=JSON&key="+apiKeyLocationIQ+"&q="+cityLocationIQ+"&limit=1";
  https.get(urlLocationIQ, function(response){
    response.on("data",function(data){
      let locationIQ = JSON.parse(data);
      const lat= locationIQ[0].lat;
      const lon= locationIQ[0].lon;
      const cityName = locationIQ[0].display_name;
    })
  })

  let urlWeather = 'https://api.openweathermap.org/data/2.5/onecall?&lat='+lat+'&lon='+lon+'&exclude=alerts,minutely&units=metric&appid='+apiKeyWeather+'&lang=en&cnt=7';
  https.get(urlWeather, function(response){
    response.on("data",function(data){
      let weatherData = JSON.parse(data);
      console.log(weatherData);
      
    })
  })
  
})

在节点下,HTTP/HTTPS请求数据可以以多个块的形式到达,在解析结果 JSON 字符串之前需要将这些块合并。

本质上 JSON 解析需要在on("end", callback),不在一个on("data", callback),否则可能会面临 JSON 文本不完整的风险。

Node 文档有一个很好的工作示例,用于在下面获取 JSON 数据http.get(选项[回调]) https://nodejs.org/docs/latest/api/http.html#http_http_get_options_callback。由于相似之处,这似乎在文档的 HTTPS 部分中没有重复HTTP and HTTPS APIs.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SyntaxError:IncomingMessage 处 JSON.parse () 处的 JSON 输入意外结束。 的相关文章

随机推荐