#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 Пожалуйста, обновите код и сообщения об ошибках / скриншоты, указанные в вашем вопросе