Почему добавление заголовков CORS к маршруту OPTIONS не позволяет браузерам получать доступ к моему API?

653

Я пытаюсь поддерживать CORS в моем приложении Node.js, которое использует веб-инфраструктуру Express.js. Я прочитал обсуждение группы Google о том, как с этим справиться, и прочитал несколько статей о том, как работает CORS. Сначала я сделал это (код написан в синтаксисе CoffeeScript):

app.options "*", (req, res) ->
  res.header 'Access-Control-Allow-Origin', '*'
  res.header 'Access-Control-Allow-Credentials', true
  # try: 'POST, GET, PUT, DELETE, OPTIONS'
  res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
  # try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
  res.header 'Access-Control-Allow-Headers', 'Content-Type'
  # ...

Это не похоже на работу. Похоже, мой браузер (Chrome) не отправляет начальный запрос OPTIONS. Когда я только что обновил блок для ресурса, мне нужно отправить перекрестный запрос GET по адресу:

app.get "/somethingelse", (req, res) ->
  # ...
  res.header 'Access-Control-Allow-Origin', '*'
  res.header 'Access-Control-Allow-Credentials', true
  res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
  res.header 'Access-Control-Allow-Headers', 'Content-Type'
  # ...

Работает (в Chrome). Это также работает в Safari.

Я прочитал это ...

В браузере, реализующем CORS, каждому перекрестному запросу GET или POST предшествует запрос OPTIONS, который проверяет, в порядке ли GET или POST.

Итак, мой главный вопрос: почему этого не происходит в моем случае? Почему не вызывается мой блок app.options? Зачем мне устанавливать заголовки в моем главном блоке app.get?

mikong
источник
2
Золотое правило CoffeeScript гласит: «Это просто JavaScript».
SSH это
Этот ответ может быть полезным: stackoverflow.com/a/58064366/7059557
AmirReza-Farahlagha

Ответы:

185

Чтобы ответить на ваш главный вопрос, спецификация CORS требует, чтобы вызов OPTIONS предшествовал POST или GET, если в POST или GET есть непростой контент или заголовки.

Типы контента, для которых требуется предполетный запрос CORS (вызов OPTIONS), - это любой тип контента, кроме следующих :

  1. application/x-www-form-urlencoded
  2. multipart/form-data
  3. text/plain

Любые другие типы контента, кроме перечисленных выше, вызовут предполетный запрос.

Что касается Заголовков, любые Заголовки Запроса кроме следующего вызовут предполетный запрос:

  1. Accept
  2. Accept-Language
  3. Content-Language
  4. Content-Type
  5. DPR
  6. Save-Data
  7. Viewport-Width
  8. Width

Любые другие заголовки запроса активируют предполетный запрос.

Таким образом, вы можете добавить пользовательский заголовок, такой как:, x-Trigger: CORSи он должен вызвать предполетный запрос и попасть в блок OPTIONS.

См. Справочник по MDN Web API - Предварительные запросы CORS.

Добес Вандермер
источник
11
Можете ли вы привести пример?
Глен Пирс,
3
На странице, на которую я ссылался, похоже, есть несколько примеров. Не могли бы вы сказать, какой пример, по вашему мнению, отсутствует?
Добес Вандермер
7
В общем, ответы только на ссылки хрупкие, потому что в любой момент могут быть повреждены. Тем не менее, этот ответ кажется достаточно хорошим, поскольку он выделяет общие условия, при которых OPTIONSблоки не отправляются. Было бы неплохо, если бы у него был список принятых HEADERS, или которые content-typesтребуют OPTIONS, и т. Д., Но это хорошее начало
dwanderson
668

Я нашел самый простой способ заключается в использовании Node.js пакета CORS . Самое простое использование:

var cors = require('cors')

var app = express()
app.use(cors())

Есть, конечно, много способов настроить поведение в соответствии с вашими потребностями; на странице, указанной выше, приведено несколько примеров.

Уэйн Маурер
источник
1
Это терпит неудачу для меня, когда я использую это с учетными данными. :( Все остальное работало как шарм. Но это бесполезно для меня, если оно не работает с установленным значением true
Sambhav Sharma
Работает нормально для запроса ajax. Я хочу реализацию CORS для тегов сценариев и iFrame, потому что в этих запросах источник отсутствует в заголовке запроса :( Как это реализовать?
akashPatra
59
Вы также должны установитьcors({credentials: true, origin: true})
Нлавсон
2
как включить здесь предварительную проверку опций?
Чови
1
Это не работает с июля 2020 года
FactorialTime
446

Попробуйте передать управление следующему подходящему маршруту. Если Express сначала совпадает с маршрутом app.get, он не продолжит движение по маршруту параметров, если вы не сделаете это (обратите внимание на использование next) :

app.get('somethingelse', function(req, res, next) {
    //..set headers etc.

    next();
});

Что касается организации CORS, я поместил ее в промежуточное ПО, которое хорошо работает для меня:

//CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'example.com');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

//...
app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({ secret: 'cool beans' }));
    app.use(express.methodOverride());
    app.use(allowCrossDomain);
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});
evilcelery
источник
1
Я полагаю, что OPTIONS происходит перед GET, тогда как, если вы делаете POST - запрос OPTIONS не возникает ...
Ник
21
Является ли config.allowedDomainsразделенные запятыми строки или массив?
pixelfreak
2
config.allowedDomains должен быть массивом, разделенным
пробелами
1
Дополнительный сеанс был удален путем простой перестановки порядка промежуточного программного обеспечения. С другой стороны, это требует немного большей безопасности. если источник не находится в разрешенном домене, то запрос все еще обрабатывается, только браузер не сможет его увидеть, а источник может быть подделан. Мой совет - сделать проверку, и если источник не указан в списке разрешенных, немедленно вернуть 403. Также, если какая-либо конфиденциальная информация обслуживается, проверьте пользователя через сеанс.
Ксерри
1
@mcfedr Не могли бы вы объяснить, что вы подразумеваете под массивом с пробелами?
pootzko
116

Чтобы остаться в той же идее маршрутизации. Я использую этот код:

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

Аналогично примеру http://enable-cors.org/server_expressjs.html

Lialon
источник
1
Это идет в файле grunt.js?
Оливер Диксон
4
Как насчет предполетной подготовки?
backdesk
Нет @OliverDixon, это на стороне сервера
Александр Маньо Телес Зимерер
84

делать

npm install cors --save

и просто добавьте эти строки в ваш основной файл, куда направляется ваш запрос (сохраните его перед любым маршрутом).

const cors = require('cors');
const express = require('express');
let app = express();
app.use(cors());
app.options('*', cors());
Ятендер Сингх
источник
3
app.options('*', cors())// включить до других маршрутов
Раджешвар
52

Я сделал более полное промежуточное программное обеспечение, подходящее для экспресс или подключения. Поддерживает OPTIONSзапросы на предполетную проверку. Обратите внимание, что это разрешит CORS доступ ко всему, вы можете поставить некоторые проверки, если хотите ограничить доступ.

app.use(function(req, res, next) {
    var oneof = false;
    if(req.headers.origin) {
        res.header('Access-Control-Allow-Origin', req.headers.origin);
        oneof = true;
    }
    if(req.headers['access-control-request-method']) {
        res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
        oneof = true;
    }
    if(req.headers['access-control-request-headers']) {
        res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
        oneof = true;
    }
    if(oneof) {
        res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
    }

    // intercept OPTIONS method
    if (oneof && req.method == 'OPTIONS') {
        res.send(200);
    }
    else {
        next();
    }
});
mcfedr
источник
Привет, я наткнулся на ваше решение и мне было интересно, должен ли флаг 'oneof' быть установлен в false, если один из заголовков не был обнаружен?
Леонидас
1
Некоторые запросы не будут иметь все заголовки. В частности, запрос GET будет отправлен браузером, и когда он не получит правильный ответ разрешения источника, будет выдана ошибка js. Принимая во внимание, что для запроса POST сначала отправляется запрос OPTIONS с заголовком allow-method, и только после этого будет отправлен фактический запрос POST.
McFedr
1
Ах я вижу. Спасибо. Вы когда-нибудь сталкивались с проблемами, не помещая туда res.send (200), если метод req был 'options'?
Леонидас
Я не думаю, что пытался отправить что-то еще, я мог бы предположить, что любой другой ответ заставит браузер отклонить запрос на предварительную проверку.
McFedr
работает как шарм, я бы просто добавил список авторизованных доменов для большей безопасности
Себастьен Х.
37

установить модуль Cors ExpressJS. Вы можете выполнить следующие действия>

Установка

npm install cors

Простое использование (включить все запросы CORS)

var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());

для получения более подробной информации перейдите на https://github.com/expressjs/cors

рахул ислам
источник
2
TypeError: Cannot read property 'headers' of undefinedСамая базовая настройка приложения.
Оливер Диксон
Вы уверены, что у вас есть объект запроса? :)
кодовой основе
33

Сделайте что-то вроде этого:

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
Russ
источник
20

Тестирование выполнено с экспресс + узел + ионный работает в разных портах.

Localhost:8100

Localhost:5000

// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests

app.all('*', function(req, res, next) {
       res.header("Access-Control-Allow-Origin", "*");
       res.header("Access-Control-Allow-Headers", "X-Requested-With");
       res.header('Access-Control-Allow-Headers', 'Content-Type');
       next();
});
Даниэль Лауриндо
источник
2
В каком файле нам нужно добавить эти строки?
Шефали Чаудхари
20

Сначала просто установите Cors в вашем проекте. Возьмите терминал (командную строку) и cdперейдите в каталог вашего проекта и выполните следующую команду:

npm install cors --save

Затем возьмите файл server.js и измените код, добавив в него следующее:

var cors = require('cors');


var app = express();

app.use(cors());

app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header('Access-Control-Allow-Methods', 'DELETE, PUT, GET, POST');
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   next();
});

Это сработало для меня ..

Ренеш Т.К.
источник
4
Вам не нужно, corsесли вы делаете res.headerвещи. corsэто библиотека, которая обрабатывает все это для вас. Удалите свою первую и третью строки (AKA все, с чем cors), и вы обнаружите, что он все еще работает.
Thisissami
черт возьми, я уверен, что все, что вам действительно нужно, это эта строкаres.header("Access-Control-Allow-Origin", "*");
thisissami
хотя имейте в виду, что этим вы подвергаете риску свою безопасность. :)
thisissami
10

Это работает для меня, так как это простая реализация внутри маршрутов, я использую Meanjs и его работает нормально, Safari, Chrome и т. Д.

app.route('/footer-contact-form').post(emailer.sendFooterMail).options(function(req,res,next){ 
        res.header('Access-Control-Allow-Origin', '*'); 
        res.header('Access-Control-Allow-Methods', 'GET, POST');
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
        return res.send(200);

    });
Кико Сейо
источник
10

Некоторое время назад я столкнулся с этой проблемой, поэтому я сделал это, чтобы включить CORS в моем приложении nodejs:

Сначала вам нужно установить cors с помощью команды ниже:

npm install cors --save

Теперь добавьте следующий код в стартовый файл вашего приложения, например ( app.js or server.js)

var express = require('express');
var app = express();

var cors = require('cors');
var bodyParser = require('body-parser');

//enables cors
app.use(cors({
  'allowedHeaders': ['sessionId', 'Content-Type'],
  'exposedHeaders': ['sessionId'],
  'origin': '*',
  'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
  'preflightContinue': false
}));

require('./router/index')(app);
Шубхам Верма
источник
попробовал это после установки cors. Корс не является функцией
Колин Риккельс
9

По моему index.jsя добавил:

app.use((req, res, next) => {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
   next();
}) 
Балай Хан
источник
2
Я должен прокомментировать, что Access-Control-Allow-Origin = *означает, что вы не сможете отправлять Cookies на сервер, они будут отклонены Политикой CORS - источник: developer.mozilla.org/en-US/docs/Web/HTTP/… . Так что не используйте это, если вы хотите использовать куки.
Эксапсы
7

Если вы хотите сделать его специфичным для контроллера, вы можете использовать:

res.setHeader('X-Frame-Options', 'ALLOWALL');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');

Пожалуйста, обратите внимание, что это также позволит использовать iframes.

Корай Гокмен
источник
6

Можете сослаться на код ниже для того же. Источник: Academind / node-restful-api

const express = require('express');
const app = express();

//acts as a middleware
//to handle CORS Errors
app.use((req, res, next) => { //doesn't send response just adjusts it
    res.header("Access-Control-Allow-Origin", "*") //* to give access to any origin
    res.header(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content-Type, Accept, Authorization" //to give access to all the headers provided
    );
    if(req.method === 'OPTIONS'){
        res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET'); //to give access to all the methods provided
        return res.status(200).json({});
    }
    next(); //so that other routes can take over
})
Гадия Реема
источник
Я видел много ответов, и это имеет что-то важное, я пытался использовать эту часть кода после некоторых других конфигураций, и это не сработало, и по какой-то причине я попытался поместить код после приложения const app = express();и работает! Я думаю, что важно упомянуть об этом.
rfcabal
4

Мое простейшее решение с Express 4.2.0 (EDIT: кажется, не работает в 4.3.0) было:

function supportCrossOriginScript(req, res, next) {
    res.status(200);
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type");

    // res.header("Access-Control-Allow-Headers", "Origin");
    // res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    // res.header("Access-Control-Allow-Methods","POST, OPTIONS");
    // res.header("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE, PUT, HEAD");
    // res.header("Access-Control-Max-Age","1728000");
    next();
}

// Support CORS
app.options('/result', supportCrossOriginScript);

app.post('/result', supportCrossOriginScript, function(req, res) {
    res.send('received');
    // do stuff with req
});

Я полагаю, app.all('/result', ...)что работа будет работать тоже ...

похлопывание
источник
3

Самый простой ответ - просто использовать пакет cors .

const cors = require('cors');

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

Это позволит CORS по всем направлениям. Если вы хотите узнать, как включить CORS без внешних модулей , все, что вам действительно нужно, это некоторое промежуточное программное обеспечение Express, которое устанавливает заголовок «Access-Control-Allow-Origin» . Это минимум, который вам нужен, чтобы разрешить кросс-запросы доменов из браузера на ваш сервер.

app.options('*', (req, res) => {
  res.set('Access-Control-Allow-Origin', '*');
  res.send('ok');
});

app.use((req, res) => {
  res.set('Access-Control-Allow-Origin', '*');
});
vkarpov15
источник
2

Использование Express Middleware прекрасно работает для меня. Если вы уже используете Express, просто добавьте следующие правила промежуточного программного обеспечения. Это должно начать работать.

app.all("/api/*", function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
  res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
  return next();
});

app.all("/api/*", function(req, res, next) {
  if (req.method.toLowerCase() !== "options") {
    return next();
  }
  return res.send(204);
});

Ссылка

Ишан Патель
источник
2

Ниже работал для меня, надеюсь, это поможет кому-то!

const express = require('express');
const cors = require('cors');
let app = express();

app.use(cors({ origin: true }));

Получил ссылку с https://expressjs.com/en/resources/middleware/cors.html#configuring-cors

Ватсал Шах
источник
В каком файле это входит? peanutbutter.js?
Эндрю Копер
не уверен насчет peanutbutter.js, для меня это express.js. По сути, это должен быть файл, в котором вам требуется приложение Express, его инициализация и файлы маршрутизации.
Ватсаль Шах
1

Я обнаружил, что это очень легко сделать с помощью пакета запросов npm ( https://www.npmjs.com/package/request )

Тогда я основал свое решение на этом посте http://blog.javascripting.com/2015/01/17/dont-hassle-with-cors/

'use strict'

const express = require('express');
const request = require('request');

let proxyConfig = {
    url : {
        base: 'http://servertoreach.com?id=',
    }
}

/* setting up and configuring node express server for the application */
let server = express();
server.set('port', 3000);


/* methods forwarded to the servertoreach proxy  */
server.use('/somethingElse', function(req, res)
{
    let url = proxyConfig.url.base + req.query.id;
    req.pipe(request(url)).pipe(res);
});


/* start the server */
server.listen(server.get('port'), function() {
    console.log('express server with a proxy listening on port ' + server.get('port'));
});
melvinv
источник
1

В машинописи, если вы хотите использовать node.js пакет CORS

/**
* app.ts
* If you use the cors library
*/

import * as express from "express";
[...]
import * as cors from 'cors';

class App {
   public express: express.Application;

   constructor() {
       this.express = express();
       [..]
       this.handleCORSErrors();
   }

   private handleCORSErrors(): any {
       const corsOptions: cors.CorsOptions = {
           origin: 'http://example.com',
           optionsSuccessStatus: 200
       };
       this.express.use(cors(corsOptions));
   }
}

export default new App().express;

Если вы не хотите использовать библиотеки третьей части для обработки ошибок cors, вам нужно изменить метод handleCORSErrors ().

/**
* app.ts
* If you do not use the cors library
*/

import * as express from "express";
[...]

class App {
   public express: express.Application;

   constructor() {
       this.express = express();
       [..]
       this.handleCORSErrors();
   }

   private handleCORSErrors(): any {
       this.express.use((req, res, next) => {
           res.header("Access-Control-Allow-Origin", "*");
           res.header(
               "Access-Control-ALlow-Headers",
               "Origin, X-Requested-With, Content-Type, Accept, Authorization"
           );
           if (req.method === "OPTIONS") {
               res.header(
                   "Access-Control-Allow-Methods",
                   "PUT, POST, PATCH, GET, DELETE"
               );
               return res.status(200).json({});
           } 
           next(); // send the request to the next middleware
       });
    }
}

export default new App().express;

Для использования файла app.ts

/**
* server.ts
*/
import * as http from "http";
import app from "./app";

const server: http.Server = http.createServer(app);

const PORT: any = process.env.PORT || 3000;
server.listen(PORT);
преодолевающим
источник
1
«Если сервер написан на машинописи» - это не так. Вопрос говорит, что написано в CoffeeScript.
Квентин
1
@Quentin Я просто хотел показать альтернативу в машинописи, надеясь, что это кому-нибудь поможет.
преодолевающие
1

Это похоже на ответ Пата с той разницей, что я заканчиваю с res.sendStatus (200); вместо следующего ();

Код будет перехватывать все запросы типа метода OPTIONS и отправлять обратно заголовки контроля доступа.

app.options('/*', (req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    res.sendStatus(200);
});

Код принимает CORS из всех источников в соответствии с запросом в вопросе. Однако было бы лучше заменить * на конкретное происхождение, то есть http: // localhost: 8080, чтобы предотвратить неправильное использование.

Поскольку мы используем метод app.options вместо метода app.use, нам не нужно выполнять эту проверку:

req.method === 'OPTIONS'

который мы можем увидеть в некоторых других ответах.

Я нашел ответ здесь: http://johnzhang.io/options-request-in-express .

Swoot
источник
1

Вы можете использовать промежуточное программное обеспечение Express, заблокировать домен и методы.

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", process.env.DOMAIN); // update to match the domain you will make the request from
  res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  next();
});
Анкит Кумар Раджпут
источник
Это помогло мне с моей проблемой, спасибо!
Fr0zenOfficial
0

Мы можем избежать CORS и перенаправить запросы на другой сервер:

// config:
var public_folder = __dirname + '/public'
var apiServerHost = 'http://other.server'

// code:
console.log("starting server...");

var express = require('express');
var app = express();
var request = require('request');

// serve static files
app.use(express.static(public_folder));

// if not found, serve from another server
app.use(function(req, res) {
    var url = apiServerHost + req.url;
    req.pipe(request(url)).pipe(res);
});

app.listen(80, function(){
    console.log("server ready");
});
Бернардо Рамос
источник
1
это не отвечает на заданный вопрос
david.barkhuizen
0

Я использовал следующие шаги для моего веб-приложения, и у меня был успех:

Добавьте пакет Cors в экспресс:

npm install cors --save

Добавьте следующие строки после конфигурации bodyParser . У меня были некоторые проблемы с добавлением до bodyParser:

 // enable cors to the server
const corsOpt = {
    origin: process.env.CORS_ALLOW_ORIGIN || '*', // this work well to configure origin url in the server
    methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'], // to works well with web app, OPTIONS is required
    allowedHeaders: ['Content-Type', 'Authorization'] // allow json and token in the headers
};
app.use(cors(corsOpt)); // cors for all the routes of the application
app.options('*', cors(corsOpt)); // automatic cors gen for HTTP verbs in all routes, This can be redundant but I kept to be sure that will always work.
Анджело Полотто
источник
0

Самый простой подход - установить модуль Cors в ваш проект, используя:

npm i --save cors

Затем в файл вашего сервера импортируйте его, используя следующее:

import cors from 'cors';

Затем просто используйте его в качестве промежуточного ПО, например:

app.use(cors());

Надеюсь это поможет!

Харшит Агарвал
источник
0

Если бы я был тобой @OP, я бы изменил свою парадигму программирования.

при условии, что вы блокируете эти CORS, потому что вы делаете запросы к localhost или что-то подобное.

В конце концов, если вы собираетесь развернуть в производственных оптоинах, таких как Google Cloud Platformили Herokuили, вам не нужно будет беспокоиться о CORS, например, разрешить отправку или что- то еще, когда вы находитесь в производстве.

поэтому при тестировании сервера просто используйте, postmanи вы не заблокируете CORS, после этого разверните свой сервер и затем работайте на своем клиенте.

Мэддокс
источник
0

/ * во-первых, и это может быть проблемой среди младших разработчиков, таких как я: убедитесь, что вы используете "lambda" >>>> "` ", а не" '"в вашей выборке методе ! * /

`` `const response = await fetch ( https://api....);

/ plus, настоятельно рекомендуется следующая статья: https://developer.edamam.com/api/faq /

Мила Кохен
источник
0

просто тяжело

 let my_data = []
const promise = new Promise(async function (resolve, reject) {
    axios.post('https://cors-anywhere.herokuapp.com/https://maps.googleapis.com/maps/api/directions/json?origin=33.69057660000001,72.9782724&destination=33.691478,%2072.978594&key=AIzaSyApzbs5QDJOnEObdSBN_Cmln5ZWxx323vA'
        , { 'Origin': 'https://localhost:3000' })
        .then(function (response) {
            console.log(`axios response ${response.data}`)
            const my_data = response.data
            resolve(my_data)
        })
        .catch(function (error) {
            console.log(error)
            alert('connection error')
        })
})
promise.then(data => {
    console.log(JSON.stringify(data))
})
Рашид Икбал
источник
0

Попробуйте это в вашем основном файле js:

app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header(
  "Access-Control-Allow-Headers",
  "Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method"
);
res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");
res.header("Allow", "GET, POST, OPTIONS, PUT, DELETE");
next();
});

Это должно решить вашу проблему

Энцо Баррера
источник