node.js - 为每个请求创建 'Objects' new

标签 node.js express

我正在使用 express 构建一个小型 Web 应用程序。 (从Steam获取匹配信息)

因为我不希望我的 Steam 客户端一直处于登录状态,所以我在响应中绑定(bind)了 Steam 登录。

我用 express 创建了一个简单的示例应用程序并使用添加了一个路由器

app.use('/user', users);

现在在我的 user.js 文件中

router.get('/', function(req, res, next) {
 if (req.query.id == null || req.query.id == '') {
       console.log('wrong');
    } else {
   var steam = require('steam'),
            fs = require('fs'),
            csgo = require('csgo'),
            bot = new steam.SteamClient(),
            CSGO = new csgo.CSGOClient(bot, false);

//... login and event handlers ...

 CSGO.on('ready', function () {
                    console.log('node-csgo ready.');

                    CSGO.requestRecentGames(CSGO.ToAccountID(req.query.id));
                    CSGO.on("matchList", function(list) {
                        res.end(JSON.stringify(list, null, 2));
                        CSGO.exit();
                    });
                });
}

但是现在当我第二次打开网页时,客户端告诉我我已注销。为什么该部分不执行第二次? (创建 Steam 变量、登录、...?)。

谢谢。

如果您需要更多信息,我可以上传示例应用程序。 (我不知道创建 http 服务器是否对我的问题很重要)

最佳答案

我制作了 node-csgo,所以我可以提供一些帮助。

你似乎在做的是每次有人从 express 请求你的网页时创建一个新的 Steam 客户端 - 然后随后将其杀死,这确实不是完成任务的最佳方式。我建议尝试像我在下面所做的那样的事情。

var steam = require('steam'),
    fs = require('fs'),
    csgo = require('csgo'),
    bot = new steam.SteamClient(),
    CSGO = new csgo.CSGOClient(bot, false);

// Do your login and event handling here

// Once the CSGO client is ready, then allow the web server to take requests.
CSGO.on('ready', function() {
    console.log('node-csgo ready.');
    router.get('/', function(req, res, next) {
        if (req.query.id == null || req.query.id == '') {
            console.log('wrong');
        } else {
                CSGO.requestRecentGames(CSGO.ToAccountID(req.query.id));
                CSGO.on("matchList", function(list) {
                    res.end(JSON.stringify(list, null, 2));
                });
        }
     });
 });

关于node.js - 为每个请求创建 'Objects' new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30055359/

相关文章:

javascript - Heroku buildpack horse 忽略 package.json 中的 Node 版本

node.js - 从本地 Node.js Webapp 访问 Heroku 上的远程 Postgres 数据库时出现问题

javascript - meteor JS : How to get value of an input text

javascript - Node.js:通过前端执行服务器脚本

html - Jade 如何处理 src 属性?为什么/javascripts直接进入文件夹而不是/../public/javascripts?

node.js - 如何从单独的路由文件访问 session 变量

docker - Express session 无法通过Docker在Graphql中持久化 session

javascript - Express 路由文件中的 Socket.io

javascript - 如何将 EJS 模板转换为字符串?

node.js - Express.js - 如何将 url 参数从主路由器传递到另一个路由器模块?