【问题标题】:API gives error (net::ERR_EMPTY_RESPONSE)API 给出错误 (net::ERR_EMPTY_RESPONSE)
【发布时间】:2021-06-30 22:52:12
【问题描述】:

API 在浏览器以及 Google Postman 从数据库中返回数据时运行良好,但是当我尝试从我的 react JS 应用程序访问它时,它给了我空响应的错误 这是API代码

//Server.js
if (req.url === "/all" && req.method === "GET") {
    getAllUsers(req, res);
//Controller.js
async function getAllUsers(req, res) {
  try {
    const users = await dbData.findAllUsers();
    if (!users) {
      res.writeHead(400, { "Content-Type": "application/json" });
      res.end(JSON.stringify({ message: "user not found" }));
    } else {
      res.writeHead(200, { "Content-Type": "application/json" });
     res.end(JSON.stringify(users));
    }
  } catch (err) {
    console.log(err);
  }
}

这是model.js文件

//Model.js
function findAllUsers() {
  return new Promise((resolve, reject) => {
    con
      .connect()
      .then(() => {
        req
          .query(`select * from users`)
          .then((records) => {
            console.log(records);
            resolve(records);
            con.close();
          })
          .catch((err) => {
            console.log(err);
            con.close();
          });
      })
      .catch((err) => {
        console.log(err);
        con.close();
      });
  });
}

这是在 react js 文件中

async componentDidMount() {
    const response = await fetch("http://localhost:5000/all", {
      method: "GET",
      headers: {
        "content-Type": "application/json",
        cors: "no-cors",
      }
    });
    const data = await response.json();
    console.log("Data : ", data);
  }

(当我使用来自 json 文件的数据但不适用于数据库数据时,它可以工作)

【问题讨论】:

    标签: javascript node.js reactjs api


    【解决方案1】:

    我不确定这里发生了什么,但你为什么要发送cors: "no-cors"

    尝试在您的服务器上支持 CORS,安装 npm package here。并将其添加到您的服务器,看看会发生什么。

    const cors = require('cors');
    app.use(cors());
    

    而且,你不需要这个:

    res.writeHead(400, { "Content-Type": "application/json" });
    res.end(JSON.stringify({ message: "user not found" }));
    

    你可以:

    res.json({ message: "user not found" });
    

    事实上,这可能是导致问题的原因。

    【讨论】:

    • 你说得对 Ziad Alzarka 这是由于 cors 但它是一个无框架节点 js API,因此不能在其中使用 npm cors 包它只需放置一个允许 cors 的额外标头即可修复跨度>
    【解决方案2】:

    只需放置 ACAO(Access-Control-Allow-Origin) 标头并将其设置为我发送请求的原始地址即可解决问题。

    res.writeHead(400, { "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "http://localhost:1234",
     });
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2011-09-24
      • 2011-09-13
      • 1970-01-01
      • 2020-09-16
      相关资源
      最近更新 更多