【问题标题】:Displaying JSON file onto the browser using nodejs使用 nodejs 在浏览器上显示 JSON 文件
【发布时间】:2019-04-04 06:30:54
【问题描述】:

我正在创建一个 localhost 服务器并读取文件路径,然后读取 json 文件

我在 url 中传递文件路径。
像这样:http://localhost: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.log(jsonData);//just displaying in console
      console.log(data);
      res.render("./main.ejs", { jsonData: jsonData });
    });
  });
});

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

app.listen(PORT, function() {
  console.log(`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>

显示的输出是这样的: the link to the output how it is shown

所以我无法以正确的方式显示它。
知道我该怎么做吗?

即使我想对 json 文件进行更改并在目标位置反映更改

我还没有为编辑按钮添加任何功能。

【问题讨论】:

  • &lt;%= JSON.stringify(JSON.parse(jsonData)) %&gt; 完全没有意义。您将jsonData(它是一个字符串)解析为一个对象,然后立即将其再次转换回字符串。你得到的正是你输入的内容。&lt;%= jsonData %&gt; 将产生完全相同的结果,而无需所有额外的处理。
  • 无论如何你是什么意思以“适当”的方式显示它......我们不知道你对“适当”的定义是什么。请举例说明您想要的输出。无论如何,如果您希望它是可编辑的,您可能希望将其放入 textarea,然后正确设置您的表单,以便它将数据再次发送回服务器,以便您将其保存回磁盘。

标签: javascript node.js json ajax express


【解决方案1】:

我猜你的意思是你不希望它被“漂亮地打印”,比如

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

而不是 1 长线...

如果是这样,那么你可以这样做:

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

stringify 的第三个参数告诉它要使用多少个空格作为缩进,并让它漂亮地将 JSON 打印到多行而不是 1 长行。

&lt;code&gt; 标记通常具有等宽字体的默认样式,这使得字符排列更美观。

&lt;pre&gt; 标签告诉浏览器内容是预先格式化的;应保留空格和换行符。


另外,请注意您应该永远将上述代码公开到公共互联网。这是一个巨大的安全漏洞。您允许任何人从您的硬盘驱动器上读取任何文件。有很多关于此的文章,但这里有一个讨论此安全风险的示例:

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

【讨论】:

  • 非常感谢,我会看到文章谢谢
【解决方案2】:

请为此使用&lt;pre&gt; 标签。

<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>

【讨论】:

  • &lt;%= JSON.stringify(JSON.parse(jsonData)) %&gt; 完全没有意义。您将 jsonData(一个字符串)解析为一个对象,然后立即将其再次转换为字符串。你得到的正是你所投入的。
  • 无论如何,你怎么知道这是解决方案? OP 说他们不喜欢输出,但没有指定他们希望它看起来像什么。 “正确的方式”不是任何人都可以用来生成 GUI 的定义。所以说真的,这个问题目前无法回答。
  • Pre 无论如何都适用于 json 格式。希望它能解决问题@crazycoder
  • 当然它适用于某种风格的 JSON 格式,但我们实际上并不确定这是否是 OP 想要的。据我们所知,也许他们想用它制作一个 HTML 表格或其他东西。然后他们开始谈论编辑它,所以也许他们希望它在一个像文本区域这样的表单元素中。完全不清楚
猜你喜欢
  • 2021-02-19
  • 2018-09-19
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多