【发布时间】: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