Отображение файла JSON в браузере с помощью nodejs

Я создаю сервер localhost и читаю путь к файлу, а затем читаю файл json

Я передаю путь к файлу в url.
Примерно так: http: // локальный: 3000 / C: /Users/Desktop/generated.json

серверный код

var createError = require("http-errors");
var express = require("express");
var path = require("path");
var PORT = 3000;
var fs = require("fs");
var app = express();
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

const url = require("url");
app.use(function(req, res) {
  let k = req.originalUrl;
  file = k.slice(1);


  fs.exists(file, function(exists) {
    fs.readFile(file, "utf-8", (error, data) => {
      if (error) throw error;
      let jsonData = [];
      jsonData.push(data);
      console.info(jsonData);//just displaying in console
      console.info(data);
      res.render("./main.ejs", { jsonData: jsonData });
    });
  });
});

app.use(function(req, res, next) {
  next(createError(404));
});

app.listen(PORT, function() {
  console.info(`app is listening at port ${PORT}`);
});

это код на стороне клиента с использованием ejs

<!DOCTYPE html>
<html>

<head contentType = "application/JSON">


</head>

<body>
    <form>
            <h1>
            <%=JSON.stringify(JSON.parse(jsonData)) %>
        </h1>
            <br />
        <button name = "Click to edit" type = "submit" style = "height:100px ;width:200px ;font-size:20px">
            Click to edit
        </button>
    </form>
</body>

</body>

</html>

Отображаемый результат выглядит примерно так: ссылка на вывод, как он отображается

Поэтому я не могу отобразить это должным образом. Есть идеи, как я могу это сделать?

Даже если я хочу внести изменения в файл json и отразить изменения в месте назначения

Я еще не добавил никаких функций к кнопке редактирования.

<%= JSON.stringify(JSON.parse(jsonData)) %> совершенно бессмысленен. Вы разбираете jsonData, который является строкой, в объект, а затем сразу же снова превращаете его обратно в строку. Вы получаете именно то, что вставили. <%= jsonData %> даст точно такой же результат без дополнительной обработки.
ADyson 31.10.2018 10:07

В любом случае, что вы имеете в виду, отображайте это «правильным» способом ... мы не знаем, каково ваше определение «правильного». Приведите пример желаемого результата. В любом случае, если вы хотите, чтобы его можно было редактировать, вы, вероятно, захотите поместить его в текстовое поле, а затем правильно настроить форму, чтобы она снова отправляла данные обратно на сервер, чтобы вы могли сохранить их обратно на диск.

ADyson 31.10.2018 10:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
2 675
2

Ответы 2

Пожалуйста, используйте для этого тег <pre>.

<pre>
    <%=JSON.stringify(JSON.parse(jsonData)) %>
</pre>

Пример:

<html>

<body>
  <h1> Below is the code without pre </h1>
  [ { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem
  sunt rem eveniet architecto" }, { "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui
  aperiam non debitis possimus qui neque nisi nulla" } ]

  <h1> Below is the code with pre </h1>
  <pre>
     [
      {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
      },
      {
        "userId": 1,
        "id": 2,
        "title": "qui est esse",
        "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
      }
     ]
     </pre>
</body>

</html>
<%= JSON.stringify(JSON.parse(jsonData)) %> совершенно бессмысленен. Вы анализируете jsonData, которая является строкой, в объект, а затем сразу же снова превращаете его обратно в строку. Вы получаете именно то, что вкладываете.
ADyson 31.10.2018 12:28

В любом случае, откуда вы знаете, что это решение? OP сказал, что им не нравится вывод, но не указал, как они хотят, чтобы он выглядел вместо этого. «правильный способ» - это не определение, которое кто-либо может использовать для создания графического интерфейса. Так что, действительно, сейчас на этот вопрос невозможно ответить.

ADyson 31.10.2018 12:29

Pre в любом случае работает с форматированием json. Надеюсь, это решит проблему @crazycoder

Parth Lukhi 31.10.2018 12:46

Конечно, это работает для форматирования JSON в определенном стиле, но на самом деле мы не знаем наверняка, чего хотел OP. Насколько нам известно, возможно, они хотели сделать из этого HTML-таблицу или что-то в этом роде. А потом они начали говорить о его редактировании, так что, возможно, они хотят, чтобы это было в элементе формы, таком как текстовое поле. Совершенно непонятно

ADyson 31.10.2018 12:52

Я предполагаю, что вы имеете в виду, что не хотите, чтобы это было "красиво напечатано", что-то вроде

{
  "key": "value",
  "key2": "value2"
}

вместо 1 длинной очереди ...

В таком случае вы можете:

<code><pre><%=JSON.stringify(JSON.parse(jsonData), null, 2) %></pre></code>

Третий параметр stringify сообщает ему, сколько пробелов использовать в качестве отступа, и он позволяет печатать JSON на нескольких строках вместо одной длинной строки.

Тег <code> обычно имеет стиль по умолчанию моноширинного шрифта, что делает символы более красивыми.

Тег <pre> сообщает браузеру, что содержимое предварительно отформатировано; пробелы и символы новой строки должны быть сохранены.


Также обратите внимание, что вы должны никогда опубликовать приведенный выше код в общедоступном Интернете. Это огромная дыра в безопасности. Вы разрешаете кому угодно читать любой файл с вашего жесткого диска. Об этом написано множество статей, но вот один пример, в котором говорится об этой угрозе безопасности:

https://blog.rapid7.com/2016/07/29/pentesting-in-the-real-world-local-file-inclusion-with-windows-server-files/

спасибо большое, я увижу статью спасибо

crazy coder 31.10.2018 15:31

Другие вопросы по теме