在RESTAPI上传输JavaScript函数
我必须将一些配置文件从前端移动到后端。以下是配置的一个示例:在RESTAPI上传输JavaScript函数,javascript,json,function,api,transfer,Javascript,Json,Function,Api,Transfer,我必须将一些配置文件从前端移动到后端。以下是配置的一个示例: { name: 'backend_field_created_at', alias: 'createdAt', render: (row) => { return (<span>{`${date(row.createdAt)}`}</span>) }, sortable: true, type: 'text' } 正如您所看到的
{
name: 'backend_field_created_at',
alias: 'createdAt',
render: (row) => { return (<span>{`${date(row.createdAt)}`}</span>) },
sortable: true,
type: 'text'
}
正如您所看到的,还有JavaScript函数,它们彼此非常不同。应该从RESTAPI调用配置文件。解决这个问题的最佳方法是什么
eval在这里是一个选项,因为源是我们的服务器吗?我强烈建议不要使用这种方法。不仅eval是不安全的,而且对我来说,从前端到后端执行代码以及从前端到后端执行代码的整个想法似乎都很脆弱。 对于初学者来说,它可能会导致依赖关系、模块和安全问题方面的问题 我的建议是创建一个“共享”函数的命名列表,可能作为npm模块,并在后端和前端加载。所以你可以这样做:
{
name: 'backend_field_created_at',
alias: 'createdAt',
fnc_render: 'row_rendering_function_name',
fnc_parameters: a_serializable_param_list,
sortable: true,
type: 'text'
}
并且,接收数据的人应该这样做:\
(data) => {
functionList[data.fnc_render](data.fnc_parametes);
}
您需要functionlist来实现:
functionList['row_rendering_function_name'] = (row) => {
return (<span>{`${date(row.createdAt)}`}</span>)
}
如果您100%相信API不会返回有害代码,那么从安全角度来看,这种方法是没有问题的 然而,即使您完全信任API,将客户端代码写入服务器端也不是一个好的实践。编写服务器代码时,应该只考虑服务器。如果你是项目的唯一开发人员,那么你可能不会感觉到负面影响,但是如果一个团队成员编写了这样的代码,你将不得不继续他或她的工作并进一步开发它,那么龙就开始出现了 因此,您应该将客户端和服务器端分开,并且不要使用eval,除非您完全被迫这样做