Node / Expressjs' No Access-Control-Allow-Origin标头存在' Twitter API

时间:2015-05-19 12:25:18

标签: javascript ajax node.js twitter express

我使用带有Express的Express和用于Twitter API应用程序的twit和express-cors模块。

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

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

无论是否使用回调参数都会发生这种情况。

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

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 :(得分:0)

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