繁体   English   中英

如何在页面加载时将变量从节点服务器发送到javascript客户端?

[英]How to send a variable from node server to javascript client on page load?

我的web应用程序是99%静态的,除了页面加载时,如果他们在URL中指定了登录名,我想将其用户名和要连接的房间的名称发送给客户端。 这两个变量需要在客户端Javascript中进行访问。 因此,我一直试图弄清什么是简单的任务,但运气不佳。

  1. 使用模板引擎。

    • 问题:过度杀毒,因为我只需要一个静态页面上的一个/两个变量,就需要用Javascript(而不是HTML)来访问它
  2. 页面加载后发出AJAX请求

    • 问题:导致闪烁,因为首先加载页面,然后DOM更新一两秒钟,因为必须等待发送和接收请求。 而且它效率不高,因为它需要第二个请求/响应。
  3. 使用WebSockets

    • 问题:与上述相同。
  4. 在页面加载的标题信息中发送它

    • 问题:除非您进行了奇怪的修改 (仅作为单独的AJAX调用工作),否则无法访问Javascript中的标头信息。 可以仅使用#2。

因此,我最终要做的是使用Cookie,并且100%都能奏效。 目前,它实际上没有问题,我只是认为代码非常丑陋且脆弱,我正在寻找更好的方法。 以下是Cookie解决方案的摘要:

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函数中使用这两个变量。 我正在寻找替代解决方案,以使我可以在一个请求中发送所有这些信息,同时又避免了很多复杂性和混乱性。

  1. 重定向到特殊URL,例如index.htm?var1=5&var2=6并在JS中使用location.search.substr(1).split('&')

  2. 在HTML中使用嵌入js文件,例如<script src='ajax.js'></script> 在此示例中,ajax.js没有被缓存,并且包含以下内容:

     window.var1 = 5; window.var2 = 6; 

    它可以动态生成。

  3. 使用Cookie。

顺便说一句,我认为使用模板并不坏。 您可以使用javascript模板。 应该不会有性能问题,因为模板速度很快,您只需要执行一个模板即可。 我会使用模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM