Я пытаюсь прочитать файл json в своей программе Javascript.

configuration.json

{
    "ProxyURLS": ["xxxx","xxxx"],
    "DatabaseURLS": ["xxxx"]
}

Файл JSON находится в том же каталоге, что и index.html.

Индексировать HTML

<!DOCTYPE html>
<html>
<head>
<title>QUBGrader</title>

<script type="text/javascript">

import { readFile } from "fs/promises";
//Define path for configuration readFile

path = "./configuration"
//read file get json
async function readJsonFile(path) {
  const file = await readFile(path, "utf8");
  return JSON.parse(file);
}

readJsonFile("./package.json").then((data) => {
  console.log(data);
  getProxyURL(data);
});



function getProxyURL(data)
{
  console.log("here")
  console.log(data)
}

... file continues ...

Я хочу получить объект JSON и передать его функции getProxyURL.

Я получаю эту ошибку, когда я не включаю оператор импорта

(index):13 Uncaught (in promise) ReferenceError: readFile is not defined
    at readJsonFile ((index):13:16)
    at (index):17:1

Я получаю эту ошибку, когда включаю оператор импорта

Uncaught SyntaxError: Cannot use import statement outside a module (at (index):8:1)

Из поиска ошибки (https://bobbyhadz.com/blog/javascript-syntaxerror-cannot-use-import-statement-outside-module#:~:text =The%20%22SyntaxError%3A%20Cannot%20use%20import,json%20for%20Node.)

Кажется, мне нужно определить «модуль», но я не уверен, как это сделать в одном файле .html.

Любая помощь оценили.

Я последовал совету из этого вопроса: Динамический импорт с файлом json не работает машинопись

ИЗМЕНИТЬ

После реализации предложенного решения:

function readJson () {
   // http://localhost:8080
   fetch('./configuration')
   .then(response => {
       if (!response.ok) {
           throw new Error("HTTP error " + response.status);
       }
       return response.json();
   })
   .then(json => {
       getProxyURL(json);
       //console.log(this.users);
   })
   .catch(function () {
       this.dataError = true;
   })
};

readJson();

Я получаю такую ​​ошибку:

Failed to load resource: the server responded with a status of 404 (Not Found)
-1
Matt Daemon 25 Ноя 2022 в 21:33
1
Вы не можете использовать модули Node.js в браузере. fs/promises — это модуль Node.js.
 – 
jabaa
25 Ноя 2022 в 21:35

1 ответ

Модуль fs/promises доступен только в node.js, но не в браузерах. Вы должны использовать API fetch(), который поддерживается всеми браузерами (кроме очень старых браузеров, таких как Internet Explorer). Вы можете найти документацию на MDN.

1
I'm random 25 Ноя 2022 в 21:44
Я попробовал ваше предложение, но я получаю сообщение об ошибке. Пожалуйста, смотрите обновленный вопрос
 – 
Matt Daemon
25 Ноя 2022 в 22:01
Попробуйте ввести URL-адрес в браузере и посмотрите, что он возвращает. Убедитесь, что файл доступен по этому адресу.
 – 
I'm random
25 Ноя 2022 в 22:04
Вы не добавили расширение к имени файла fetch('./configuration.json')
 – 
Jamie Clark
25 Ноя 2022 в 22:06
Ура спасибо
 – 
Matt Daemon
25 Ноя 2022 в 22:11