#javascript #node.js #reactjs #cors
#javascript #node.js #reactjs #cors
Вопрос:
Я использую React во внешнем интерфейсе и node / express server во внутреннем интерфейсе, и раньше проект работал нормально, но теперь я получаю ошибку CORS
Доступ к выборке в ‘https://dry-reef-22080.herokuapp.com/imageUrl ‘ из источника’https://smart-brain-04.herokuapp.com ‘ был заблокирован политикой CORS: заголовок ‘Access-Control-Allow-Origin’ отсутствует на запрошенном ресурсе. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса на ‘no-cors’, чтобы получить ресурс с отключенным CORS
Я попытался добавить режим и заголовки во внешний интерфейс
fetch(`https://dry-reef-22080.herokuapp.com/imageUrl`, {
method: "post",
mode: "no-cors",
headers: {
"Access-Control-Allow-Origin": "*",
"Content-type": "application/json"
},
body: JSON.stringify({
input: this.state.input
})
})
Я получаю доступ к другому внешнему API под названием clarifail в серверной части
const Clarifai = require('clarifai');
const app = new Clarifai.App({
apiKey: 'XYZ'
});
const handleImageUrl = (req, res) => {
app.models.predict(
'c0c0ac362b03416da06ab3fa36fb58e3',
req.body.input)
.then(data => {
res.json(data);
})
}
я также пытался использовать пакет npm cors, но проблема все еще сохраняется
const express = require('express');
const bcrypt = require('bcrypt-nodejs');
const cors = require('cors');
const knex = require('knex');
const Register = require('./Controllers/Register');
const signin = require('./Controllers/signin');
const profileget = require('./Controllers/profileget');
const image = require('./Controllers/image');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
const db = knex({
client: 'pg',
connection: {
connectionString: process.env.DATABASE_URL,
ssl: true
}
});
const app = express();
app.use(cors())
app.use(express.json());
Комментарии:
1.
no-cors
скорее всего, это не то, что вы хотите. Я написал сообщение в блоге об этом. Итак, удалитеno-cors
и поделитесь, какая ошибка появляется в консоли.2. Это ошибка:— Доступ к выборке в ‘ dry-reef-22080.herokuapp.com/imageUrl ‘ from origin ‘ localhost: 3000 ‘ был заблокирован политикой CORS: заголовок ‘Access-Control-Allow-Origin’ отсутствует на запрошенном ресурсе. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса на ‘no-cors’, чтобы получить ресурс с отключенным CORS.
3. если
dry-reef-22080.herokuapp.com
ваш, вам нужно добавить конфигурацию CORS, если она не ваша, тогда вам нужно получить к ней доступ через ваш сервер, а не через клиент4. кроме того, не добавляйте заголовки ответов в качестве заголовков запросов …
Access-Control-Allow-Origin
является заголовком ответа и не принадлежит запросу5. да dry-reef-22080.herokuapp.com мой сервер, который я развернул на heroku
Ответ №1:
Попробуйте установить режим из выборки в cors, поскольку вы используете модуль cors npm в своем серверном модуле, вы также должны использовать cors для вашего запроса, отправляемого на серверную часть. Это должно выглядеть примерно так:
fetch(`https://dry-reef-22080.herokuapp.com/imageUrl`, {
method: "post",
mode: "cors",
headers: {
"Content-type": "application/json"
},
body: JSON.stringify({
input: this.state.input
})
})