从我自己的服务器获取,错误:“JSON 输入意外结束”

Posted

技术标签:

【中文标题】从我自己的服务器获取,错误:“JSON 输入意外结束”【英文标题】:Fetching from my own Server, ERROR: "Unexpected end of JSON input" 【发布时间】:2021-09-03 06:45:01 【问题描述】:

我对后端真的很陌生,并试图摆弄 API-Calls 和 Client-Server 的东西。

const express = require("express");
const cors = require("cors");
const fetch = require("node-fetch");

const app = express();
app.use(cors());
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Listening on port $port`));

app.get("/express_backend", (req, res) => 
  fetch(
    "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=XXXXXXXXXXXXXXXXXX&steamid=76561197996613749&format=json"
  )
    .then((response) => response.json())
    .then((data) => console.log(data))
    .then((data) => res.send(data));
);

这是我的服务器文件,它正确地从 steam api output screenshot 获取数据

但我很难将它从服务器获取到我的客户端。

import React,  useState, useEffect  from "react";

const App = () => 
 const [data, setData] = useState(null);

 useEffect(() => 
   fetch("/express_backend")
     .then(function (response) 
       return response.json();
     )
     .then(function (json) 
       let fetchedData = json;
       setData(fetchedData);
     )
     .catch(function (err) 
       console.log(err.message);
     );
 , []);

 return (
   <div>
     <p>data</p>
   </div>
 );
;

export default App;

我认为“JSON 输入意外结束”错误与“response.json() 行有关,但我不确定如何继续或如何修复它。提前致谢!

【问题讨论】:

【参考方案1】:

后端服务器有一个小问题。在下面的 Promise 链中,第二个 thenable 没有向第三个 thenable 返回任何东西,所以基本上你在做res.send(data)时没有向“响应”写任何东西@

app.get("/express_backend", (req, res) => 
  fetch(
    "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=XXXXXXXXXXXXXXXXXX&steamid=76561197996613749&format=json"
  )
    .then((response) => response.json())
    .then((data) => console.log(data))
    .then((data) => res.send(data));
);

正确的顺序是合并第二个和第三个然后处理程序,像这样

app.get("/express_backend", (req, res) => 
  fetch(
    "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=XXXXXXXXXXXXXXXXXX&steamid=76561197996613749&format=json"
  )
    .then((response) => response.json())
    .then((data) => 
         console.log(data);
         res.send(data);
     )
)

【讨论】:

以上是关于从我自己的服务器获取,错误:“JSON 输入意外结束”的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JpaRepository.findAll() 方法从我的 Oracle 数据库中获取错误的数据?

如何通过 YouTube Data API v3 从我自己的 YouTube 频道获取所有视频

错误消息:应为 BEGIN_ARRAY 但是来自我自己的休息服务器 Localhost 的 BEGIN_OBJECT

烧瓶问题和错误请求

我正在尝试从我的 vuex 存储中获取数据,但它给出了一个错误

iOS 应用程序中的 Twitter 提要 - 我如何仅从我自己的帐户获取列表提要 [无需应用用户登录 Twitter]