在 ExpressJS 中将对象传递给 JavaScript
pass object to javascript in ExpressJS
我在JSON.parse()
中将包含双引号的json字符串转换回javascript对象时遇到问题。以下是详细信息。
-
我在 nodejs 应用程序中的变量
groupdata
中保存了一个对象.js[{"_id":"56adb85319dec52455d11c21","fullName":"NY Metro Office 365 What New'" group","createdAt":"2015-08-25T17:03:59.000Z","stats":{"members":65}}]
-
在我的 nodejs 应用程序中.js代码中,groupdata 对象作为 json 字符串传递给客户端。
function doRender() { res.render('groupdata', { 'groupdata': JSON.stringify(groupdata) }); }
-
我的客户端代码首先尝试通过函数
htmlDecode()
防止 XSS 攻击,然后JSON.parse()
有效的 json 字符串作为对象。
如果只有字符串不包含双引号,JSON.parse(test1)
将成功。 JSON.parse(test2)
将失败,如以下错误
function htmlDecode(input){ //prevent XSS attack;
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
console.log('groupdata: ' + "<%= groupdata %>");
var test1 = htmlDecode("<%= (groupdata) %>");
console.log('test1: ' + test1);
var test2 = htmlDecode("<%= JSON.stringify(groupdata) %>");
console.log('test2: ' + test2);
JSON.parse(test1); // Succeed if only test1 value contains no double quote
JSON.parse(test2); // ERROR: Uncaught SyntaxError: Unexpected token _
客户端 chrome 浏览器中的控制台登录:
groupdata: [{"_id":"56adb85319dec52455d11c21","fullName":"NY Metro Office 365 What New" group","createdAt":"2015-08-25T17:03:59.000Z","stats":{"members":65}}]
test1: [{"_id":"56adb85319dec52455d11c21","fullName":"NY Metro Office 365 What New" group","createdAt":"2015-08-25T17:03:59.000Z","stats":{"members":65}}]
test2: "[{"_id":"56adb85319dec52455d11c21","fullName":"NY Metro Office 365 What New'" group","createdAt":"2015-08-25T17:03:59.000Z","stats":{"members":65}}]"
问题:在这种情况下,如何将带有双引号的 json 字符串转换为 javascript 对象?
事实证明,EJS有自己的方法来防止XSS攻击的htmlescape。
<script type="text/javascript">
var groupdata = <%- JSON.stringify(groupdata); %>
</script>
这既简单又干净。再次感谢@migg的评论。
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值