首页 文章

Node / Expressjs 'No Access-Control-Allow-Origin header is present' Twitter API

提问于
浏览
1

我正在使用Node with Express和Twitter API应用程序的twit和express-cors模块 .

我得到了所有与jQuery一起工作的东西,我现在正试图让它与vanilla JS一起工作 .

我收到控制台消息“XMLHttpRequest无法加载https://api.twitter.com/1.1/search/tweets.jsonq=%23cats&callback=? . 请求的资源上没有'Access-Control-Allow-Origin'标头 . 因此,不允许来源'http://127.0.0.1:3000' . 响应的HTTP状态代码为404.”

无论是否使用callback参数都会发生这种情况 .

所以这是相关的节点代码:

var express = require('express'),
cors = require('express-cors'),
Twit = require('twit'),
path = require('path');

var T = new Twit({
    consumer_key:         ''
  , consumer_secret:      ''
  , access_token:         ''
  , access_token_secret:  ''
})    

var app = express();

app.use(cors({
    allowedOrigins: [
        'twitter.com'
    ]
}))

app.get('/api/search/:hashtag', function(req, res){ 

    T.get('search/tweets', { q: '#cats', count: 5 }, function(err, data, response) {
      res.jsonp(data); // jsonp or json, neither seem to work
      console.log(data)
    });
});

app.param('hashtag', function(req, res, next, hashtag){
    req.hashtag = hashtag;
    next();
});

AJAX调用如下:

document.getElementById("submitButton").addEventListener("click", function(){ getCORS(url, success); });

  function getCORS(url, success) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', url);
      xhr.onload = success;
      xhr.send();
      return xhr;
  }

  getCORS('https://api.twitter.com/1.1/search/tweets.jsonq=%23cats', function(request){
      response = request.currentTarget.response || request.target.responseText;
      console.log(response);
  });

它正在使用没有express-cors模块的jQuery版本 . 我在这里错过了什么?

1 回答

  • 0

    看起来你正在两次安装cors中间件 . 看看是否摆脱了第一个 app.use(cors()) 修复它 . 然后你可以尝试使用curl来测试它 . curl -v -H "Origin: https://twitter.com" http://localhost:3000/ 用您正在使用的端口替换端口3000 .

相关问题