Итак, если вы пытаетесь получить доступ к какой-либо другой службе https://api.darksky.net/forecast/
(которую вы не контролируете) со своей веб-страницы, то вы ничего не можете сделать, чтобы заставить COR работать для этого. Сервер api.darksky.net
должен решить, разрешены ли COR или нет. Вы не можете это изменить.
Вы можете сделать запрос со своей веб-страницы на свой сервер, чтобы попросить ее получить для вас некоторые данные из api.darksky.net
, а затем вернуть их на свою веб-страницу (работая в качестве простого прокси-сервера). Ваш сервер не подлежит никаким ограничениям COR при доступе к api.darksky.net
. Только COR ограничены COR.
И, как вы обнаружили, вы также можете использовать прокси-сервис, который включает COR и извлекает данные для вас.
Предположим, вы хотите прокси части darksky API, вы можете сделать что-то простое, как это:
const express = require('express');
const app = express();
const request = require('request');
const apiRouter = express.Router();
// maps /api/forecast/whatever to http://api.darksky.net/forecast/developerKey/whatever
// and pipes the response back
const apiKey = "yourAPIKeyHere";
apiRouter.get("/*", (req, res, next) => {
// parse out action and params
// from an incoming URL of /api/forecast/42.3601,-71.0589
// the /api will be the root of the router (so not in the URL here)
// "forecast" will be the action
// "42.3601,-71.0589" will be the params
let parts = req.path.slice(1).split("/"); // split into path segments, skipping leading /
let action = parts[0]; // take first path segment as the action
let params = parts.slice(1).join("/"); // take everything else for params
request({
uri: `https://api.darksky.net/${action}/${apiKey}/${params}`,
method: "get"
}).pipe(res);
});
app.use("/api", apiRouter);
app.listen(80);
Теперь, когда вы отправляете этот сервер, этот запрос:
/api/forecast/42.3601,-71.0589
будет запрашивать:
https://api.darksky.net/forecast/yourAPIKeyHere/42.3601,-71.0589
и отправьте результат обратно вызывающей стороне. Я запустил это тестовое приложение, и оно сработало для меня. Хотя я не видел ничего, кроме URL-адресов прогноза, в darksky. net API, он бы работал для любого формата /api/someAction/someParams
.
Обратите внимание, вы, вероятно, НЕ хотите включать CORS на вашем сервер, потому что вы не хотите, чтобы веб-страницы других людей могли использовать ваш прокси. И, поскольку вы просто отправляете запросы на свой собственный сервер, вам не требуется CORS, чтобы это сделать.