【发布时间】:2018-08-06 15:32:44
【问题描述】:
我在从 twitter api 获取响应时遇到了问题(使用 npm 包 Twitter)。在 Chrome 中我得到:
无法加载https://api.twitter.com/1.1/search/tweets.json?q=node.js:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:3000' 不允许访问。响应的 HTTP 状态代码为 400。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
所以我用插件启用了 CORS,错误变为:
无法加载 https://api.twitter.com/1.1/search/tweets.json?q=node.js:预检响应包含无效的 HTTP 状态代码 400。
我现在不知道该怎么做。我在 webpack.config.js 中尝试了一些不同的东西:
var path = require('path');
var webpack = require('webpack');
var Dotenv = require('dotenv-webpack');
module.exports = {
devServer: {
inline: true,
historyApiFallback: true,
contentBase: './src',
port: 3000,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept",
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
},
proxy: {
"/api": "http://localhost:3000"
}
},
devtool: 'cheap-module-eval-source-map',
entry: './dev/js/index.js',
module: {
loaders: [
{
test: /\.js$/,
loaders: ['babel'],
exclude: /node_modules/
},
{
test: /\.scss/,
loader: 'style-loader!css-loader!sass-loader'
},
{
loader: 'json-loader',
test: /\.json$/
}
]
},
output: {
path: 'src',
filename: 'js/bundle.min.js'
},
node: {
console: false,
fs: 'empty',
net: 'empty',
tls: 'empty'
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new Dotenv({
path: './.env',
safe: false
})
]
};
这是我要打的电话
import Twitter from 'twitter';
const client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
bearer_token: process.env.TWITTER_BEARER_TOKEN
});
client.get('search/tweets', {q: 'node.js'}, function(error, tweets, response) {
console.log(tweets);
});
我也在 firefox 中尝试过启用了 CORS 插件,但我得到了这个错误:
跨域请求被阻止:同源策略不允许读取位于https://api.twitter.com/1.1/search/tweets.json?q=node.js 的远程资源。 (原因:CORS 预检通道未成功)。
【问题讨论】:
标签: node.js reactjs twitter webpack cors