Я пытался выполнить вызов API (nodejs с экспресс-запуском на локальном хосте) из приложения реагирования, запущенного в браузере на локальном сервере dev (web-pack dev server). Все работало хорошо, пока я не попытался вызвать API. Они оба работают на разных портах.
Я попытался добавить заголовки cors (рекомендуется MDN) как к пост-вызову (из приложения в браузере), так и к ответу от API Nodejs, но ни один из них не решил проблему.
Код для вызова API (в браузере):
const headers = {
'Content-Type': 'application/json',
'access-token': '',
'Access-Control-Allow-Origin': '*',
}
export default async () => {
try {
const body = JSON.stringify({
test: true,
})
const response = await fetch('http://localhost:1337/internal/provider/check_email_exist', {
method: 'POST',
headers,
body,
})
console.log(response)
} catch (e) {
return e
}
}
Промежуточное программное обеспечение API (в nodejs):
// Verify All Requests
app.use(VerifyToken)
// Compress
app.use(compression())
// Helmet middlware
app.use(helmet())
// Body Parser
app.use(bodyParser.urlencoded({
extended: false,
}))
app.use(bodyParser.json())
Ожидаемый результат - просто дать код состояния 200 и ответить данными.
Фактический результат:
OPTIONS http://localhost:1337/internal/provider/check_email_exist 404 (Not Found)
Access to fetch at 'http://localhost:1337/internal/provider/check_email_exist' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.