我使用带有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版本。我在这里缺少什么?
答案 0 :(得分:0)
看起来你已经两次安装了cors中间件。看看是否摆脱了第一个app.use(cors())
修复它。然后你可以尝试使用curl来测试它。 curl -v -H "Origin: https://twitter.com" http://localhost:3000/
用您正在使用的端口替换端口3000。