gpt4 book ai didi

JavaScript ||将 API 与 ES6 模块结合使用

转载 作者:行者123 更新时间:2023-11-28 16:56:43 24 4
gpt4 key购买 nike

我目前正在练习在 JS (vanilla) 中使用 API 和 es6 模块。

app.js

import Game from './model/Game';

const proxy = 'https://cors-anywhere.herokuapp.com/';
let key = 'MY_API_KEY_PRIVATE'; //kept private for StackOverflow
let steamID = '76561197996900532';

getOwnedGames();

async function getOwnedGames() {

try {

const result = await fetch(`${proxy}http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=${key}&steamid=${steamID}&format=json&include_appinfo=true`);

const data = await result.json();
let gamesList = data.response.games;

console.log(gamesList);

} catch(error) {

console.error(error);
}

}

.

Game.js

export class Game {


}

现在,无需使用 import GotGames from './model/Game'; 即可正常工作,但会出现以下错误:

Uncaught SyntaxError: Cannot use import statement outside a module

通过在 HTML 的脚本标记中添加 type="module",我在这个空间中看到了类似的问题,但这会出现以下错误:

Access to script at 'my_file_path' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

为什么添加 type="module"会影响我的 API 调用?如何做到这一点?这是否与要求 Node.js 安装 webpack 有关?

最佳答案

您的问题实际上是一个非常广泛的问题,但我会尽力澄清其中的一些重要方面。

-剧透开始-

网络包。

-剧透结束-

请考虑到,即使它因不适合初学者而闻名,有些人仍将它与 Babel 和 React 一起视为 Web 开发技术的前沿。所以至少值得研究一次。简而言之,它将把您的 ES 模块转换为自定义系统(用普通的旧式 JavaScript 编写),该系统在技术上与所有浏览器兼容,并保留功能以及许多其他优点。

但是,为了简单起见,您可能想要使用像 React 这样的框架,它在底层使用 Webpack,因此您不必直接处理它。

真心推荐你this Medium article发现有关 JavaScript 和 NodeJS 模块历史的一些有趣事实。

最后,我们都同意 ES6 模块是 future ,但是,即使在解决了您的具体问题之后,您也会遗憾地发现 ES6 模块是一个非常新的标准,并且目前浏览器的支持相对较差。

回答您的问题:

默认情况下,浏览器不会将 JavasScript 文件解释为模块,因此您必须使用 type="module" 显式声明它们。脚本标签中的属性。这显然就是您遇到第一个错误的原因。

要正确导入“Game.js”模块,您必须重写导入语句,如下所示:import {Game} from './model/Game';因为您进行了命名导出。正如评论中所写,在 MDN 上阅读有关导入/导出的内容,您会更清楚。

最后,CORS 错误可能是由服务器配置错误引起的。特别是带有标题。您可能想尝试设置 Access-Control-Allow-Origin标题为 *或您的特定服务器名称,因此新请求将具有 Origin header 与 null 不同.

我希望这能为您指明一条扩展知识的好途径。

* 编辑:要解决单击打开文件时有关错误的注释中的问题,我建议使用以下不为人知的元标记 <meta http-equiv="Access-Control-Allow-Origin" content="*">当没有服务器时模拟http header。我不确定它是否有效,但从技术上讲应该可行,请在评论中告诉我,因为我很好奇。

参见this

关于JavaScript ||将 API 与 ES6 模块结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com