![](/img/trans.png)
[英]You may need an appropriate loader to handle this file type. ReactJs
[英]Cross-Origin Request to API for JSON data - “You may need an appropriate loader to handle this file type.”
我正在尝试使用 Webpack 和 Axios 从浏览器请求来自 Genius API 的 JSON 数据。
这是一个跨域请求,我知道这有时很棘手。 有一段时间我收到以下错误:
Failed to load https://api.genius.com/songs/378195: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.
所以我然后将Access-Control-Allow-Origin: *
到标题中。 现在,当我尝试运行npm run build
时出现以下错误:
You may need an appropriate loader to handle this file type.
| const headers = {
| Authorization: `Bearer ${ACCESS_TOKEN}`,
| Access-Control-Allow-Origin: *
| };
|
下面是我正在捆绑的条目 index.js,其中删除了我的访问令牌。 我知道 webpack 2.x^ 默认加载 JSON。 关于从这里去哪里的任何提示?
索引.js
const axios = require('axios');
const ACCESS_TOKEN = "XXXXXXXXXXXXXX";
const id = '378195';
const url = `https://api.genius.com/songs/${id}`
const headers = {
Authorization: `Bearer ${ACCESS_TOKEN}`,
"Access-Control-Allow-Origin": "*"
};
window.newSong = function {
axios.get(url, { headers })
.then(response => {
console.log(response.data.response.song);
})
.catch(error => {
console.log(error);
});
}
webpack.config.js
const path = require('path');
const config = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
module.exports = config;
您的headers
定义不是有效的 JavaScript。 如果对象的键包含语言中保留的任何特殊字符,则必须引用它,因为它不会被解析为标识符。 例如: Access-Control
等效于Access - Control
,这是一个减法,运算符周围的空格对解析器没有影响。
你给它的值也不是有效的 JavaScript,因为*
是乘法运算符,它需要两个操作数(左和右)。 如果你想要文字值,那应该是一个字符串。
const headers = {
Authorization: `Bearer ${ACCESS_TOKEN}`,
"Access-Control-Allow-Origin": "*"
};
看起来您正在构建一个仅限客户端的应用程序。 在这种情况下,我发现通过 auth 标头传递访问令牌不起作用。 但是使用查询参数可以。
我不确定为什么在撰写本文时,文档没有明确提及这一点。
使用访问令牌
要使用访问令牌发出经过身份验证的请求,请将其包含在 HTTP
Authorization
标头中,并以单词“Bearer”和一个空格开头。 例如,标头的值可以是Bearer 1234tokentokentoken
。在授权标头中传递令牌是验证 API 请求的首选方式。 但是,API 还支持将令牌作为
GET
请求的access_token
查询参数或POST
正文的元素提供。
所以请求的 url 应该类似于:
https://api.genius.com/songs/${id}?access_token=${ACCESS_TOKEN}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.