【问题标题】:Node/Expressjs 'No Access-Control-Allow-Origin header is present' Twitter APINode/Expressjs '不存在 Access-Control-Allow-Origin 标头' Twitter API
【发布时间】:2015-07-31 06:40:20
【问题描述】:

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

我已经用 jQuery 完成了所有工作,现在我正在尝试让它与 vanilla JS 一起工作。

我收到控制台消息“XMLHttpRequest cannot load https://api.twitter.com/1.1/search/tweets.jsonq=%23cats&callback=?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:3000' 因此不允许访问。响应有HTTP 状态码 404。”

无论有没有回调参数都会发生这种情况。

所以这里是相关的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 版本。我在这里错过了什么?

【问题讨论】:

  • 你能发布正在运行的 jQuery 版本吗?
  • 当然@Andrew Lavers。在 HTML 文件中:´$('#submitButton').click(function(e){ $.get('/api/search/' + $('#hashtag').val(), function(data){ console.log('data', data); ... } }); e.preventDefault(); });
  • 在节点中:var express = require('express'), Twit = require('twit'), path = require('path'); var T = new Twit({ consumer_key: '' , consumer_secret: '' , access_token: '' , access_token_secret: '' }) var app = express(); app.get('/api/search/:hashtag', function(req, res){ T.get('search/tweets', { q: '#cats', count: 5 }, function(err, data, response) { res.json(data); console.log(data) }); }); app.param('hashtag', function(req, res, next, hashtag){ req.hashtag = hashtag; next(); });
  • 你知道你可以用这些代码 sn-ps 来编辑你的问题,而不是试图把它们塞进评论区……

标签: javascript ajax node.js twitter express


【解决方案1】:

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

【讨论】:

  • 糟糕,我是!但是它并没有解决问题。我用 curl 测试过,得到了这个回复:curl -v -H "Origin: https://twitter.com" http://localhost:3000/ * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * connect to 127.0.0.1 port 3000 failed: Connection refused * Failed to connect to 127.0.0.1 port 3000: Connection refused * Closing connection 0 curl: (7) Failed to connect to 127.0.0.1 port 3000: Connection refused"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2018-10-28
  • 2019-08-15
  • 2017-02-21
  • 2015-09-28
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多