获取node.js中范围内的所有已定义变量

时间:2014-01-10 01:12:28

标签: node.js

我正在尝试获取已定义的所有变量,我尝试使用global对象 但它似乎缺少定义为var token='44';的那些,只包括定义为token='44';的那些。我想要的是idealy,就像php的get_defined_vars()函数。我需要访问变量,因为我需要停止节点进程然后在同一点重新启动而不必重新计算所有变量,所以我想将它们转储到某处并稍后访问它们。

2 个答案:

答案 0 :(得分:0)

如你所说

  

我想将它们转储到某处并稍后访问它们。

看起来你应该为数据库工作(正如Jonathan在评论中提到的那样),但如果这是一次性的事情,你可以使用JSON文件来存储值。然后,您可以{J}文件require回到您的脚本中,Node将处理其余的文件。

我不推荐这个,但基本上创建一个变量来保存你定义的所有数据/变量。有些人可能称之为God Object。只需确保在退出脚本之前将值导出到JSON文件。如果您担心应用程序崩溃,请更频繁地执行该文件的备份。

以下是您可以使用的演示:

var fs = require('fs');

var globalData = loadData();

function loadData() {
    try { return require('./globals.json'); } catch(e) {}
    return {};
}

function dumpGlobalData(callback) {
    fs.writeFile(
        __dirname + '/globals.json', JSON.stringify(globalData), callback);
}

function randomToken() {
    globalData.token = parseInt(Math.random() * 1000, 10);
}

console.log('token was', globalData.token)
randomToken();
console.log('token is now', globalData.token)

dumpGlobalData(function(error) {
    process.exit(error ? 1 : 0);
});

答案 1 :(得分:0)

在语言本身内是不可能的。

然而:

1。如果您可以访问整个源代码,则可以使用某个库来获取全局变量列表,如下所示:

 var ast = require('uglify-js').parse(source)
 ast.figure_out_scope()
 console.log(ast.globals).map(function (node, name) {
     return name
 })

2。如果可以连接到node.js / v8调试器,也可以获取局部变量列表,请参阅node.js项目中的_debugger.js源代码。