#node.js #post #cors #base64
Вопрос:
В моем проекте Angular я делаю снимок экрана, который получаю в формате base64, чтобы отправить его с POST
запросом. Все работает, но когда я перевожу его в рабочий режим, у меня возникает ошибка CORS.
Я думаю, что это связано, потому что base64-это длинная строка, которую я попробовал в заголовке: Content-type: application/octet-stream
, Content-type: application/json
.
Ошибка CORS:
Конфигурация CORS:
app.use(cors());
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*'),
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept, Authorization',);
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
return res.status(200).json({});
}
next();
});
Угловой запрос :
headers = { 'Content-Type': 'application/json' };
generateSignature(signature) {
const data = {signature:signature}
return this.http
.post(this.url 'generateSignature',JSON.stringify(data) , { headers: this.headers} )
.toPromise()
.then(res => res as any);
}
Комментарии:
1. в производственном режиме у меня ошибка CORS . О какой ошибке идет речь? Это важная информация для людей здесь, чтобы они могли вам помочь…
2. Обратите внимание, что вам никогда не нужно указывать
Origin
в заголовкеAccess-Control-Allow-Headers
ответа. Кроме того,Access-Control-Allow-Headers
это заголовок ответа для предполетного запроса, а не для фактического запроса.3. Наконец, пожалуйста, опубликуйте фактический исходный код вашей конфигурации CORS, а не изображение. Здесь людям будет легче играть с ними.
Ответ №1:
Access-Control-Allow-Headers
Заголовок должен быть указан в ответе на предполетный запрос, но в вашем коде вы задаете его в ответе на фактический запрос.
Кроме того, вы оба используете промежуточное программное обеспечение CORS Express и устанавливаете заголовки CORS «вручную». В этом нет необходимости. Просто правильно настройте промежуточное программное обеспечение:
const options = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200,
methods: ['PUT', 'POST', 'PATCH', 'DELETE', 'GET'],
allowHeaders: ['X-Requested-With', 'Content-Type', 'Accept', 'Authorization']
};
app.use(cors(options));
Наконец, никогда не нужно указывать Origin
разрешенные заголовки, потому что этот заголовок запроса автоматически устанавливается самим браузером и, следовательно, получает пропуск.