我的web应用程序是99%静态的,除了在页面加载时,如果他们已经登录,我想向客户端发送他们的用户名和他们连接到的房间的名称(如果他们在URL中指定的话)。这两个变量需要在客户端Javascript中访问。所以我一直在试图弄清楚什么感觉像一个简单的任务,但我运气不大。如何在页面加载时从节点服务器向JavaScript客户端发送变量?
使用模板引擎。
- 问题:矫枉过正,因为我只需要一个/两个变量原本静态的页面上,我需要访问它在JavaScript中,而不是HTML
让页面后一个AJAX请求负载
- 问题:导致闪烁,因为首先在页面加载,然后DOM更新一两秒钟后,因为要等待要发送和接收的请求。而且它效率不高,因为它需要第二个请求/响应。
使用WebSockets
- 问题:上面那个问题一样。
发送它的头信息在页面加载
- 问题:除非你做a weird hack这只能作为一个单独的AJAX调用无法访问在Javascript头信息。可以使用#2。
所以我结束了用饼干做这个工作的,100%。目前实际上没有任何问题,我只是认为代码非常丑陋而且很脆弱,我正在寻找更好的方法。这是一个什么样的饼干解决方案看起来像一个片段:
app.get('/room/:roomName', function(req, res) {
res.clearCookie('room');
if (req.isAuthenticated()) {
res.cookie('username', req.user.username);
} else {
res.cookie('username', '');
}
var roomName = req.params.roomName;
if (roomNameToRoom.hasOwnProperty(roomName)) {
res.cookie('room', req.params.roomName);
}
res.sendFile(path.join(__dirname, '../public/index.html'));
});
正如你可以看到我抓住从请求的用户名和验证的房间,如果它是有效的,我发送回来。然后我在客户端使用RegEx解析cookie(非常混乱),并在JavaScript函数中使用这两个变量。我正在寻找其他解决方案,这将允许我在一个请求中发送这一切,同时避免复杂性和混乱。
你会推荐哪种模板?我发现的那些HTML代码太复杂了,不适合我。尽管我倾向于#6。我能否在服务器端不使用文件的情况下使用#6?就像在服务器上假装JSON对象是客户端上的'ajax.js'。 –
我不会建议一些确切的模板,但你可以创建node.js服务器,它使用指定扩展名的文件(如php解释器)。 #6你可以随心所欲地做。 – vitaliydev