Как исправить ситуацию, когда служба заблокирована политикой cors: в ​​запрошенном ресурсе отсутствует заголовок «access-control-allow-origin» - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь получить доступ к службе преобразования текста в речь, предоставленной 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, речь должнабыть услышанным, говоря относительный ответ.

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Ошибки CORS должны появляться только в том случае, если вы пытаетесь вызвать службу из браузера на стороне JavaScript. Сказав, что у меня сложилось впечатление, что Text to Speech был одним из сервисов 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

0 голосов
/ 06 апреля 2019

Попробуйте использовать пакет CORS

npm install cors

Для использования:

const cors = require("cors");
const corsOptions = {
    origin: "*", // Or pass origins you want
    credentials: true
};
app.use(cors(corsOptions));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...