NodeJS NEXT.js获取内部API路由

cnwbcb6i  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(92)

我试图将函数fetchCityData外包到lib/cityData中,并在以后的不同组件中使用它。我有一个next.js应用程序,在那里我使用API路由进行外部API调用。所以这有点复杂,但我的老板希望我这样做。让我们从

lib/cityData.js

const fetch = require('cross-fetch');

const fetchCityData = (city) => {  
  const options = {
    method: `POST`,
  };
  fetch(`http://localhost:3000/api/weather?city=${city}`, options)
  .then((response) => {
    if(response.ok){
      return response.json().then(data => console.log(data))
      
    }
      throw new Error('Api is not available') 
    })
  .catch(error => {
    console.error('Error fetching data: ', error)
  })
}
fetchCityData('London')
module.exports.fetchCityData = fetchCityData;

现在我只是想在控制台中测试这段代码。如果我使用fetch(/api/weather?city=${city}),我得到TypeError:仅支持绝对URL。如果我使用一个完整的URL来测试它,我会得到Error fetching data: FetchError: request to http://localhost:3000/api/weather?city=London failed, reason: connect ECONNREFUSED 127.0.0.1:3000。这是在我将代理添加到我的package.json之后。以前我也不会捡东西。我还尝试将开发和生产URL添加到我的.env.local文件中-这也没有解决问题。有什么解决办法吗?

7tofc5zh

7tofc5zh1#

添加服务器和环境解决了这个问题

const fetch = require("cross-fetch");
const dev = process.env.NODE_ENV !== "production";
const server = dev
  ? "http://localhost:3000"
  : "https://your_deployment.server.com";

const fetchCityData = (city) => {
  const options = {
    method: `POST`,
  };
  fetch(`${server}/api/weather?city=${city}`, options)
    .then((response) => {
      if (response.ok) {
        return response.json().then((data) => console.log(data));
      }
      throw new Error("Api is not available");
    })
    .catch((error) => {
      console.error("Error fetching data in city data: ", error);
    });
};
//fetchCityData('London')
module.exports.fetchCityData = fetchCityData;

相关问题