Node.js虚拟机和字符串串联
Node.js VM and string concatenation
我有一个动态生成的HTML文件,只注释了一个javascript对象。我正在尝试读取该文件,将对象作为字符串取出,并使用VM的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)
};
如果我运行此操作,它将返回以下错误:[SyntaxError: Unexpected token :]
如果我用正则表达式(即用(/'{/)
而不是('{')
)运行它,它将在没有错误的情况下执行,但它不会捕获数据。
问题:为什么两者都不起作用?我如何使用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)
};
它删除了错误,但sandbox
仍然为空。我检查了dataMap
,它确实有所需的数据,但末尾有一行空白。这会让VM崩溃吗?如果是,我该如何摆脱它,还是需要更改我的endDataMap
?
您可能需要添加括号,以便将字符串解释为对象而不是块:
vm.runInNewContext("(" + dataMap + ")", sandbox)
不在表达式中的花括号被视为块。通过将代码放在括号内,可以清楚地表明代码应该是对象文字,而不是块。
相关文章:
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 如何在JS文件中获取资源(.resx)字符串
- 用有限的字符集压缩字符串,然后在JS中解压缩
- node.js将字符串转换为要上传到Web服务器的文件
- 在 JS 中添加字符串之前强制换行
- 从JS中的字符串中读取数字的库
- 将字符串转换为JS对象
- Js char数组将字符串整数视为整数
- 闭包js框架-将ArrayBuffer转换为字符串
- 从字符串JS的末尾提取子字符串
- 替换除匹配字符串JS Regex之外的所有内容
- 在我的情况下,lastindexof和子字符串js混淆
- 如何把空格后的数字在字符串js
- 删除字符串JS最后一个字母之后的所有字符
- 如何删除重复字符形式字符串?- JS
- 字符串.JS格式
- 是否有php字符串/JS警告框的最大行数?
- 清理可搜索的字符串JS
- 忽略字符串- JS - Regex的第一个字符
- 从字符串 JS/jQuery 中删除 HTML 标记