Как исправить, когда служба была заблокирована политикой cors: заголовок ‘access-control-allow-origin’ отсутствует на запрошенном ресурсе

#node.js #text-to-speech #ibm-watson #speech-to-text

#node.js #преобразование текста в речь #ibm-watson #преобразование речи в текст

Вопрос:

Я пытаюсь получить доступ к службе преобразования текста в речь, предоставляемой IBM Watson в моем приложении NodeJS, но я вижу ошибку отказа в доступе, поскольку служба была заблокирована политикой CORS. Перепробовал все способы, настроив связанные заголовки в app.js но не удается решить проблему.

https://cloud.ibm.com/apidocs/text-to-speech?code=node

 app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:3000");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});
  

Всякий раз, когда я отправляю какой-либо текст из своего приложения NodeJS, должна быть слышна речь с соответствующим ответом.

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

1. https://cloud.ibm.com/apidocs/text-to-speech?code=node Если вы не являетесь владельцем этого ресурса и владелец установил ограничительную CORS политику, ответ на ваш вопрос невозможен

Ответ №1:

Ошибки CORS должны возникать только в том случае, если вы пытаетесь вызвать службу из javascript на стороне браузера. Сказав это, у меня создалось впечатление, что преобразование текста в речь было одной из служб Watson, которая поддерживала CORS

Если вы вызываете службу со стороны сервера на node.js тогда приложение должно иметь возможность вызывать текст в речь для службы без каких-либо ограничений CORS.

Короче говоря, если вы правильно вызываете службу, вы не должны видеть никаких ошибок CORS. Что говорит о том, что вы неправильно вызываете службу. На основе документации API — https://cloud.ibm.com/apidocs/text-to-speech?code=node

Ваш код должен выглядеть примерно так:

 var TextToSpeechV1 = require('watson-developer-cloud/text-to-speech/v1');
var fs = require('fs');

var textToSpeech = new TextToSpeechV1({
  iam_apikey: '{apikey}',
  url: '{url}'
});

var synthesizeParams = {
  text: 'Hello world',
  accept: 'audio/wav',
  voice: 'en-US_AllisonVoice'
};

// Pipe the synthesized text to a file.
textToSpeech.synthesize(synthesizeParams).on('error', function(error) {
  console.log(error);
}).pipe(fs.createWriteStream('hello_world.wav'));

  

где ваша url конечная точка должна быть чем-то вроде https://stream.watsonplatform.net/text-to-speech/api