Почему вызов Twitter API нормально работает в Node.js, но приводит к ошибке 400 в ReactJS?

Я сталкиваюсь с постоянной проблемой при разработке в ReactJS, которая заключается в том, что мои вызовы API приводят к 400 ошибкам Bad Request, хотя код отлично работает вне ReactJS.

Ниже приведен (A) код, который отлично работает локально на NodeJS, и (B) тот же код в среде React. (Зависимости были установлены в обоих случаях.) Код (A) NodeJS работает отлично, но код (B) React выдает ошибку:

Не удалось загрузить https://api.twitter.com/oauth2/token?grant_type=client_credentials: ответ на предварительную проверку имеет недопустимый код состояния HTTP 400.

(A) Код, выполняемый в Node.js:

var getBearerToken = require('get-twitter-bearer-token')
var Twitter = require('twitter');

var key = ENV.KEY;
var secret = ENV.SECRET;

getBearerToken(key, secret, (err, res) => {
  if (err) {
    // handle error
  } else {
    var client = new Twitter({
      bearer_token: res.body.access_token,
    });
    client.get('search/tweets', {q: '#WorldCup'}, function(error, tweets, response) {
      console.log(tweets);
    });
  }
})

(B) Точно такой же код запускается в ReactJS:

import React, { Component } from 'react';

var getBearerToken = require('get-twitter-bearer-token')
var Twitter = require('twitter');

export default class StockTwitter extends Component {

    componentDidMount() {
      this.setTwitter();
    }

    setTwitter() {

      var key = ENV.KEY;
      var secret = ENV.SECRET;

      getBearerToken(key, secret, (err, res) => {
        if (err) {
          // handle error
        } else {
          var client = new Twitter({
            bearer_token: res.body.access_token,
          });
          client.get('search/tweets', {q: '#WorldCup'}, function(error, tweets, response) {
            console.log(tweets);
          });
        }
      })
    }

    render() {
      return (
        <div>TBD</div>
      )
    }
}

person Daniel Axelsen    schedule 17.06.2018    source источник
comment
Итак, если он работает в Node.js, почему бы просто не вызвать конечную точку из реакции? Я уверен, что вам понадобится много конечных точек API. Я бы попытался избежать проекта API. Просто назовите это с помощью fetch   -  person Proximo    schedule 17.06.2018
comment
@Proximo - да, я даже не знаю, как это сделать. Есть ли шанс, что вы знаете пример или что-то, что могло бы заставить меня начать?   -  person Daniel Axelsen    schedule 17.06.2018


Ответы (1)


Express создает сервер с API и маршрутизацией, вы можете позвонить в Twitter на своем экспресс-сервере, а затем позвонить через интерфейс на свой собственный сервер.

Некоторые могут назвать это прокси-сервером.

Учебник Scotch IO, экспресс и маршруты, это достойно

Вот пример сборки, разветвленной на github с вашим рабочим кодом: hcra twitter build. Не просматривал твиты и не отображал их или что-то еще, но они загружаются. Остальное зависит от вас, дайте мне знать, если у вас возникнут проблемы со сборкой или запуском чего-либо.

О, да, вам нужно будет спустить его вниз, запустить git fetch, а затем проверить ветвь twitter-req.

person ContextCue    schedule 18.06.2018
comment
Интересно спасибо! Мы не использовали Express, но похоже, что это может быть правильным решением. - person Daniel Axelsen; 19.06.2018