在我的服务器中,我从数据库中检索一个对象,并将其放在一个变量中,如下所示:
let files = [{"file1": "file1Data"}, {"file2": "file2Data"} ... ];
我希望这些数据在客户端JavaScript中可用。
一种方法是在JavaScript中设置一个要调用的API。我的想法是这会造成额外的往返行程。这是因为有一个加载初始HTML/JavaScript的请求,然后还有一个加载JSON数据的请求。
因此,将JavaScript连同加载页面的初始请求一起发送到客户机会更快。
如何从服务器直接发送JSON对象并使其在客户端JavaScript中可用?
我将使用模板引擎,如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.write
和app.get
。
app.get('/', (req, res)=> {
res.write("<h1>Hi</h1>");
res.write("<script>var data="+ObjectYouRetrieve+";</script>");
res.end();
})