eval 换行符 linux,javascript

通常,您应该避免字符串连接来为eval构建代码。 字符串使得很难发现错误并且是注入攻击的一个很好的载体。 相反,我建议你在XQuery或JavaScript中编写一个正确的函数,并使用xdmp.invokeFunction来评估它。 invokeFunction采用与xdmp.eval相同的所有选项。

这是一个在安全数据库的上下文中获取角色的示例。 applyAs函数返回一个函数,该函数包装调用者提供的函数,并使用提供的eval选项对其进行评估。

function applyAs(fct, options) {

return function() {

var params = Array.prototype.slice.call(arguments);

// Curry the function to include the params by closure.

// xdmp.invokeFunction requires that invoked functions have

// an arity of zero.

var f = (function() {

return fct.apply(null, params);

}).bind(this);

// Allow passing in user name, rather than id

if(options.user) { options.userId = xdmp.user(options.user); delete options.user; }

// Allow the functions themselves to declare their transaction mode

if(fct.transactionMode && !(options.transactionMode)) { options.transactionMode = fct.transactionMode; }

return xdmp.invokeFunction(f, options); // xdmp.invokeFunction returns a ValueIterator

}

}

/**

* Gets an Array of id-name Objects. Requires privileged access to security.

*

* @param names An optional Array of role IDs as strings used to filter

* @return An Array of Objects with role ID keys and role name values

*/

function getRoles(names) {

var sec = require('/MarkLogic/security.xqy');

var db = {database: xdmp.securityDatabase()};

var roleIDs = applyAs(sec.getRoleIds, db);

var rolesItr;

if(Array.isArray(names)) {

rolesItr = roleIDs(xdmp.arrayValues(names));

} else {

rolesItr = roleIDs();

}

var roleNames = applyAs(sec.getRoleNames, db)(rolesItr).toArray().map(function(el) { return el.textContent; });

var roles = [];

var i = 0;

for(var role of rolesItr) {

var r = {}

r[role.textContent] = roleNames[i++];

roles.push(r);

}

return roles;

}

getRoles();

最初来自一个要点 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值