Ошибка CORS: Angular.JS, Node.JS и Express [дубликаты]

0

У вас возникли проблемы с возвратом данных из почтового запроса HTTP в API, который я создавал. Выдает ошибку:

XMLHttpRequest не может загрузить (здесь URL-адрес API). В запрошенном ресурсе нет заголовка "Access-Control-Allow-Origin". Происхождение http://localhost: 9000 ', следовательно, не допускается.

Здесь Угловой код на стороне клиента:

$http.post('MyAPI'sURLHere', {date: $scope.information.PubDate})
                    .then(function(response){
                        console.log(response);
                    }, function(error){
                        console.log(error);
                    });

И здесь код сервера Node для моего API:

app.post('/getThing', function(req, res){
        var date = req.body.date;
        console.log(typeof date);
        var query = Overquery
        var query2 = "alter session set nls_date_format = 'MM/dd/yyyy'";
        console.log(query);
        oracleDB.execute(query2, function(err, result){
                if(err){
                        console.log(err.message);
                }
                else{
                        console.log(result);
                }
        });
        oracleDB.execute(query, function(err, result){
                if(err){
                        console.log(err.message);
                }
                else{
                        res.header('Access-Control-Allow-Origin', '*');
                        res.header('Access-Control-Allow-Methods', 'POST');
                        res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
                        console.log(result.rows);
                        res.json(result.rows);
                }
        });
});

Впервые созданный API, поэтому любые предложения и помощь будут очень благодарны!

  • 0
    Вы правильно устанавливаете заголовки cors для POST-запроса, однако, скорее всего, вы не правильно отвечаете на запрос OPTIONS, который в некоторых случаях предшествует запросу post.
Теги:
express

2 ответа

0

В вашем узловом приложении этот образец кода должен решить ваши проблемы:

// Allowing X-domain request
var allowCrossDomain = function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Cache-Control");

    // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
      res.send(200);
    }
    else {
      next();
    }
};
app.use(allowCrossDomain);
  • 0
    этот работал для меня. Можете ли вы добавить некоторые объяснения по этому поводу? а если это безопасно для производства?
0

Выполните следующее в своем проекте из оболочки bash:

npm install cors --save

Он установит это: https://github.com/expressjs/cors

Затем добавьте это на свой сервер при создании приложения.

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

Изменить: это позволит CORS для каждого домена, который не рекомендуется по соображениям безопасности. Проверьте здесь дополнительную конфигурацию CORS: https://github.com/expressjs/cors#configuring-cors

  • 0
    Не забудьте использовать шнур до определения маршрутов в вашем app.js

Ещё вопросы

Сообщество Overcoder
Наверх
Меню