javascript - Node.js Express:将URL和会话中的数据传递到提供的JavaScript文件中

javascript - Node.js Express:将URL和会话中的数据传递到提供的JavaScript文件中,第1张

我一直在构建一个Web套接字应用程序,其中客户端打开游戏实例的链接,然后服务器尝试将客户端连接到游戏将传输信息的相应Socket.io房间。例如,连接到' / game / abc'将加载游戏页面并将页面上的套接字连接到' abc'服务器上的房间。

这样做的问题是让客户端JavaScript文件发出游戏ID和用户连接的用户名。我希望它以下列方式行事:

Client.js

var socket = io();
socket.emit("newUser", username, gameID); 

我设法通过Express.html模板渲染器传递client.html和client.js页面来实现此目的:

Server.js

app.get(/^\/game\/([a-zA-Z0-9]*)$/, function(req, res){
    var game = req.params[0];
    var user = req.session.name; //gets username stored in session
    res.render("client.html", {username: user, gameName: game});
});

app.get(/game\/(.*)\/client.js/, function(req,res){
    res.render("client.js", {username: req.session.name, gameName: req.params[0]});
});

第二个app.get()允许gameName以url中参数的形式通过client.html传递给client.js。

Client.html

 <script src="{{gameName}}/client.js"></script>

最后两次传递后,模板引擎将游戏ID和用户名都放入client.js。

Client.js

var socket = io();
socket.emit("newUser", "{{username}}", "{{gameName}}");
//leads to socket.emit("newUser", "user", "abc"); when passed through renderer

虽然这可以完成工作,但感觉令人难以置信的复杂和间接。我已经找到了替代方案,node.js express rendering inside included js files的答案建议使用AJAX调用。但是,我还没有弄清楚如何准确配置这样的AJAX调用。有没有更有效的方法来克服这个问题?

最佳答案:

1 个答案:

答案 0 :(得分:0)

您可以简化所有这些操作,并避免在Express中渲染模板以传递该变量。

您已在window.location对象中的客户端代码中使用了已授予的名称。您可以使用简单的正则表达式手动解析(在本例中),也可以使用名为客户端路由器的内容,这些内容有很多可供选择。

有一个受Express.js启发的简单客户端路由器:Page.js,它允许您使用您在Express中使用的非常相似的代码。

许多客户端框架都内置了路由器。

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复