Node/Expressjs '没有Access-Control-Allow-Origin报头'Twit

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

本文关键字:报头 Twit Access-Control-Allow-Origin 没有 Node Expressjs      更新时间:2023-09-26

我使用Node with Express与Twitter和Express -cors模块的Twitter API应用程序。

我得到了一切与jQuery工作,我现在正试图让它与香草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参数,都会发生这种情况。

下面是相关的Node代码:

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版本中工作。我遗漏了什么?

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