Не удается подключиться к twilsoc - PullRequest
1 голос
/ 27 мая 2019

Я получаю эту причудливую ошибку twilsoc при попытке подключиться к twilio через узел и отреагировать. Я не могу понять, как это исправить. Кажется, это происходит на стороне сервера моего приложения. Я сгенерировал токен на основании инструкций на сайте.

index.js:1437 Error: Can't connect to twilsock
        at Upstream.send (upstream.js:245)
        at TwilsockClient.post (client.js:280)
        at network.js:176
        at Retrier.<anonymous> (network.js:114)
        at Retrier.emit (events.js:136)
        at Retrier.attempt (retrier.js:56)
        at retrier.js:111

Вот на переднем конце

    componentDidMount() {
    fetch("http://localhost:3001/chat/token", {
      headers: { 'Content-Type': 'application/x-www-form-urlencoded',
     'Access-Control-Allow-Origin': "*",
     'Access-Control-Allow-Headers': "*"
     },
      method: 'POST',
      body: `identity=${encodeURIComponent(this.props.username)}`
    })
      .then(res => res.json())
      .then(data => Chat.create(data.token))
      .then(this.setupChatClient)
      .catch(this.handleError);
  }

вот сервер

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(pino);
app.use(cors());
const sendTokenResponse = (token, res) => {
  res.set('Content-Type', 'application/json');
  res.send(
    JSON.stringify({
      token: token.toJwt()
    })
  );
};

app.get('/api/greeting', (req, res) => {
  const name = req.query.name || 'World';
  res.setHeader('Content-Type', 'application/json');
  res.send(JSON.stringify({ greeting: `Hello ${name}!` }));
});

app.get('/chat/token', (req, res) => {
  const identity = req.query.identity;
  const token = chatToken(identity, config);
  sendTokenResponse(token, res);
});

app.post('/chat/token', (req, res) => {
  console.log('this is firing on the backend')
  const identity = req.query.identity;
  const token = new AccessToken('AC821b3924fcf9577a0eb017c4b21b----', "SK8c95cf6ba0e4a0ec5499d12ae4d----", "o4x7JC9xTEAsZC06SVsnfb2xZU9n----");
  const chatGrant = new ChatGrant({
  serviceSid:"ISdd3f2b55594f45038ac88d84b78e----" ,
});
  token.addGrant(chatGrant);
  token.identity = identity;
  sendTokenResponse(token, res);
});

app.get('/video/token', (req, res) => {
  const identity = req.query.identity;
  const room = req.query.room;
  const token = videoToken(identity, room, config);
  sendTokenResponse(token, res);
});

app.post('/video/token', (req, res) => {
  const identity = req.body.identity;
  const room = req.body.room;
  const token = videoToken(identity, room, config);
  sendTokenResponse(token, res);
});

app.listen(3001, () =>
  console.log('Express server is running on localhost:3001')
);

Ответы [ 4 ]

1 голос
/ 27 мая 2019

Разработчик Twilio здесь.

На самом деле это похоже на мой код ?.Это хорошая новость, потому что из моего поста о том, как прокси-сервер на сервер Express с React , можно избежать проблем с CORS.Если вы используете my repo , тогда вы сможете запустить сервер и внешние приложения, выполнив:

npm run dev

Тогда вам не нужно fetch изабсолютный URL, вместо этого вы можете просто использовать:

fetch("/chat/token", {
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  method: 'POST',
  body: `identity=${encodeURIComponent(this.props.username)}`
});

И сервер разработки веб-пакетов перенаправит запрос в приложение Express.

Дайте мне знать, если это поможет.

Краткое примечание по CORS

Я заметил, что вы пытаетесь передать заголовки 'Access-Control-Allow-Origin': "*", 'Access-Control-Allow-Headers': "*" из вашего запроса fetch.Однако они не заголовки запроса, а заголовки ответа.Если вам нужны заголовки CORS, тогда вам нужен сервер Express, чтобы вернуть их как часть ответа.

Но, как я уже сказал, способ установки кода для этого поста должен означать, что вам не нужноCORS на всех.Так что пока тебе не стоит об этом беспокоиться.

1 голос
/ 27 мая 2019

последние версии express больше не используют bodyparser.json, теперь он является частью express, попробуйте использовать:

 express(express.json())

вместо

express (bodyParser.json ())

0 голосов
/ 19 июня 2019

Если ни одно из этих решений не работает (они не работают для меня), вот кое-что, что могло бы помочь, что сделало ошибку исчезла для меня: https://stackoverflow.com/a/56671780/404541

0 голосов
/ 27 мая 2019

Если вы используете экспресс, самый простой способ добиться этого - использовать модуль cors.

Сначала установите его, используя следующий код:

npm install cors

Затем поместите промежуточное ПО Cors в приложение Express:

app.use(cors())

Если вы хотите узнать больше, прочитайте документацию по модулю Cors https://www.npmjs.com/package/cors

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...