提问者:小点点

在node.js/express.js中,如何将JSON对象从服务器传输到客户机?


在我的服务器中,我从数据库中检索一个对象,并将其放在一个变量中,如下所示:

let files = [{"file1": "file1Data"}, {"file2": "file2Data"} ... ];

我希望这些数据在客户端JavaScript中可用。

一种方法是在JavaScript中设置一个要调用的API。我的想法是这会造成额外的往返行程。这是因为有一个加载初始HTML/JavaScript的请求,然后还有一个加载JSON数据的请求。

因此,将JavaScript连同加载页面的初始请求一起发送到客户机会更快。

如何从服务器直接发送JSON对象并使其在客户端JavaScript中可用?


共3个答案

匿名用户

我将使用模板引擎,如EJS或handlebar。

例如,使用EJS(http://EJS.co/)-

服务器端:

// Set EJS as the view engine for Express
app.set('view engine', 'ejs');

// or just create a directory named 'views'
app.set('views', [
  path.join(__dirname, 'path/to/views'),
]);

app.get('/index', (req, res)=> {
  // 'index' must be in views dir
  return res.render('index', {
    // Pass in foo as the second argument
    // to res.render()
    foo: 'bar'
  });
})

index.EJS(EJS模板):

<script>
  const foo = <%- JSON.stringify(foo) %>;
</script>

匿名用户

在提供静态文件之前,您需要从数据库中获取对象,并将内容添加到发送的文件中。所以某种服务器端处理。节点应用程序可以从磁盘读取index.html,解析它,找到设置json数据的位置,然后将数据作为response发送。

但我不会那样做。您已经发出了多个请求,例如,客户端请求index.html。服务器发送该文件。然后客户机请求所有的资源,比如css,JavaScript,图像,字体等等。再请求一些json数据也无妨。

匿名用户

正如您所说的,如果您从数据库中检索数据,API是最常用的方法(因为您可能会在网站加载后进行此操作)。如果你检索的网站时,用户是要求网站,我的方法将简单地把它呈现为HTML,你服务给用户。

我将在这里展示一个简单的示例,其中包含纯app.writeapp.get

app.get('/', (req, res)=> {
  res.write("<h1>Hi</h1>");
  res.write("<script>var data="+ObjectYouRetrieve+";</script>");
  res.end();
})