Ошибка CORS при добавлении параметра в экспресс-приложение

#javascript #node.js #express #axios #cors

#javascript #node.js #экспресс #axios #cors

Вопрос:

Я вообще не могу понять, почему это не работает.

У меня есть экспресс-приложение, размещенное на Heroku, которое в основном делает это

 var urlMetadata = require('url-metadata')

var express = require('express')

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

app.use(cors())

app.get('/products', function (req, res, next) {
    res.json({
        msg: 'This is CORS-enabled for all origins!'
    })
})

app.get('/prod/:url', function (req, res, next) {

    var url = decodeURI(req.params.url);

    urlMetadata(url).then(
        function (metadata) {
            res.json({
                metadata
            });
        },
        function (error) {
            console.log(error)
        })
})
  

На стороне клиента

     axios
      .get(`https://git.heroku.com/egosmos-meta.git/prod`, {
        params: {
          url,
        },
      })
      .then((response) => {
        console.log(response);
      });

    axios
      .get(`https://egosmos-meta.herokuapp.com/products`)
      .then((response) => {
        console.log(response);
      });
  

И это то, что я получаю

введите описание изображения здесь

So /products работает, но /prod/:url выдает ошибку CORS

Спасибо за вашу помощь!

Ответ №1:

попробуйте использовать corsOption..

var cors = require(‘cors’)

var corsOptions = { origin: ‘https://git.heroku.com ‘, optionsSuccessStatus: 200 // некоторые устаревшие браузеры (IE11, различные SmartTV) подавляются 204 }

app.use(cors(corsOptions))

Также, если для axios попробуйте axios.get( https://git.heroku.com/egosmos-meta.git/prod/${url} ).then()

Ответ №2:

params в Axios определяются параметры запроса, например ?url=http://example.com , но ваше экспресс-приложение ожидает параметр маршрута.

Измените свой клиентский код на следующий

 axios.get(`https://git.heroku.com/egosmos-meta.git/prod/${encodeURIComponent(url)}`)
  

Вы получаете ошибку CORS, потому что у вас нет маршрута для /prod?url=... so, промежуточное программное обеспечение CORS не запускается.

Комментарии:

1. Большое спасибо за быстрый ответ. ваше объяснение имеет смысл и было полезным. Но, к сожалению, это не решило мою проблему. Мне интересно, что не так.

2. @Albrich Пожалуйста, обновите код и сообщения об ошибках / скриншоты, указанные в вашем вопросе