У меня есть приложение, которое отправляет запрос на получение API, используя экспресс в качестве моего бэкэнда.Это прекрасно работает на локальном хосте, и я вижу, что данные отображаются, но при развертывании сайта в Netlify он всегда возвращает 404:
https://weatherwiz.netlify.com/api/darksky?latitude=-34.5823529&longitude=-58.468295899999994
Это мой бэкэнд-код:
const express = require('express');
const bodyParser = require('body-parser');
require('es6-promise').polyfill();
require('isomorphic-fetch');
const http = require('http');
const dotenv = require('dotenv');
const app = express();
const server = http.createServer(app);
dotenv.config();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
const key = process.env.REACT_APP_API_KEY;
const url = `https://api.darksky.net/forecast/${key}/`;
app.get('/api/darksky', (req, res) => {
try {
const fullURL = `${url}${req.query.latitude},${req.query.longitude}?units=si`;
fetch(fullURL)
.then(response => {
return response.json();
})
.then(response => {
res.status(200).json(response);
});
} catch(error) {
res.status(500).json({'message': 'Dark Sky API error', 'error' : error});
}
});
server.listen('3001');
console.log('Server listening on port 3001');
Вот как я звоню из App.js в моем приложении React:
queryDarkSky = (latitude, longitude, time = false) => {
const url = time ? `/api/darksky?latitude=${latitude}&longitude=${longitude},${time}` : `/api/darksky?latitude=${latitude}&longitude=${longitude}`; 2
darkSky(url, this.onSuccess, this.onError);
}
и это вспомогательная функция, которая выполняет запрос:
export function darkSky(url, onRequestSuccess, onRequestFailure) {
fetch(url)
.then(res => {
if (!res.ok) {
console.log('error', res);
}
return res;
}).catch(error => {
throw error;
})
.then(res => {
return res.json()
})
.then((json) => {
onRequestSuccess(json);
}).catch((error) => {
const response = error.response;
if (response === undefined) {
onRequestFailure(error);
} else {
error.status = response.status;
error.statusText = response.statusText;
response.text().then(text => {
try {
const json = JSON.parse(text);
error.message = json.message;
} catch (ex) {
error.message = text;
}
onRequestFailure(error);
});
}
});
}
Любая помощь приветствуется, спасибо!