Javascript Node.js虚拟机和字符串连接
我有一个动态生成的HTML文件,只有一个javascript对象被注释掉。我正在尝试读取该文件,将对象作为字符串取出,并使用VM的Javascript Node.js虚拟机和字符串连接,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我有一个动态生成的HTML文件,只有一个javascript对象被注释掉。我正在尝试读取该文件,将对象作为字符串取出,并使用VM的runInNewContext()运行它。但我遇到了一些障碍 这是我的密码: 我必须阅读的文件: /* { "userId": ["2897599"], "addressId": ["1287124"] } */ 我正在尝试使用的代码: var startDataMap = body.indexOf('{') , endDataMap = body.
runInNewContext()
运行它。但我遇到了一些障碍
这是我的密码:
我必须阅读的文件:
/*
{
"userId": ["2897599"],
"addressId": ["1287124"]
}
*/
我正在尝试使用的代码:
var startDataMap = body.indexOf('{')
, endDataMap = body.indexOf('}')
, dataMap = body.substring(startDataMap, endDataMap);
var sandbox = {};
try {
vm.runInNewContext(dataMap, sandbox)
} catch (error) {
console.log(error)
};
如果我运行此命令,将返回以下错误:
[语法错误:意外标记:
如果我用正则表达式(即用(/\{/)
而不是('{')
)运行它,它将执行时不会出错,但不会捕获数据
问题:为什么这两种尝试都不起作用?如何使用VM获取所需数据?
更新: 我采纳了下面答案的建议,删除了错误并添加了一两个调整。以下是更新的代码:
var startDataMap = body.indexOf('{')
, endDataMap = body.indexOf('*/', startDataMap)
, dataMap = body.substring(startDataMap, endDataMap);
var sandbox = {};
try {
vm.runInNewContext( '(' + dataMap + ')', sandbox)
} catch (error) {
console.log(error)
};
它删除了错误,但沙盒仍然是空的。我检查了数据映射,它确实有所需的数据,但结尾有一行空白。这会导致VM关闭吗?如果是,我如何摆脱它,或者我需要更改我的数据映射吗?您可能需要添加括号,以便字符串为I被解释为对象而不是块:
vm.runInNewContext("(" + dataMap + ")", sandbox)
不在表达式中的大括号被视为块。通过将代码放在括号内,可以清楚地表明代码应该是对象文字,而不是块。奇怪。从来没有人知道这一点。因此修复了错误。但是我在
沙盒中仍然没有任何代码。我检查了数据映射中得到的内容>这是正确的数据,但结尾有空格。这会影响到事情吗?如果是,我怎么能摆脱它?我会更新代码,以显示我做的细微调整。我意识到我只是在处理一个简单的对象,所以我只切换到了JSON。parse
工作得很好。我仍然很好奇为什么它不工作。