【发布时间】:2019-08-28 18:13:48
【问题描述】:
您好,我有一个关于如何最有效地将 json 数据提供给客户端的问题,该客户端已在客户端中使用。
我使用的是带有 express 的 NodeJS。
我从我的服务器获取来自外部网站的 json / api 数据,操作数据并希望在客户端使用该数据。
方法一: 我将处理后的 JSON 数据保存在服务器上的 .json 文件中。
我可以根据请求直接从 .json 文件中发送 JSON 数据吗?
方法2:(我认为称为rest api?) 还是我必须将 JSON 数据从 .json 文件放到另一个客户端 (2)。所以我可以通过 get 请求使用来自客户端 (1) 的 Json 数据访问该客户端 (2)?
我以前从未这样做过,想听听您的建议
编辑:
使用junvar的代码,我还是遇到了一些问题:
NodeJS 应用文件:
const http = require('http');
const fs = require('fs');
// const myJson = require(<path to json>);
const myJson = fs.readFileSync("apidata.json");
console.log(myJson);
// const myHtml = require('fs').readFileSync(<path to html>);
const myHtml = fs.readFileSync("new.html");
console.log(myHtml);
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(myHtml.replace(/<JSON>/g, JSON.stringify(myJson, '', 2)));
}).listen(8900);
console.log("server is running")
客户端/html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>Hi world, here's some JSON: <JSON>.</div>
<div>Check your console too!</div>
<script>
console.log(<JSON>);
</script>`;
</body>
</html>
在我尝试连接到客户端之前,服务器运行良好。 它表明 myHtml.replace 不是一个函数。
<Buffer 5b 7b 22 6e 61 6d 65 22 3a 22 46 61 6e 74 6f 6d 22 2c 22 73 79 6d 62 6f 6c 22 3a 22 66 74 6d 22 2c 22 63 75 72 72 65 6e 74 5f 70 72 69 63 65 22 3a 30 ... >
<Buffer 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0d 0a 3c 68 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0d 0a 3c 68 65 61 64 3e 0d 0a 20 20 20 20 3c 6d 65 ... >
server is running
C:\Users\admin\WebstormProjects\expressapp\fuk.js:19
res.end(myHtml.replace(/<JSON>/g, JSON.stringify(myJson, '', 2)));
^
TypeError: myHtml.replace is not a function
有什么建议吗?
【问题讨论】:
-
是的,两者都是可能的。方法 2 将是最直接和推荐的方法。方法 1 有助于避免额外的请求。查看任何 express 教程,甚至任何 vanilla node http 服务器教程,因为您的问题和基本概念并不是唯一可以表达的。
-
@junvar 感谢您的回复。我已经在研究方法 2。大多数教程都展示了如何只向客户端发送 json 数据,这使得您无法放入 html 代码。我非常坚持将 json 数据提供给客户端。我将 EJS 用作全局变量并尝试以这种方式为客户端提供 json 服务,但 EJS 存在缺陷。使用
-
我添加了一个包含最小示例的示例。
标签: javascript html node.js json api