Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js objectmapper字符串到javascript对象_Node.js_Javascript Objects - Fatal编程技术网

node.js objectmapper字符串到javascript对象

node.js objectmapper字符串到javascript对象,node.js,javascript-objects,Node.js,Javascript Objects,使用object mapper node.js模块,将一个对象映射到另一个对象 var objectMapper = require('object-mapper'); var map = {"foo": [{ key:"newfoo", transform: function(value){ return "##"+value; }}]} var data = {"foo":"bar","baz":"blah"} var dest = objectMapper(data, map); 变

使用object mapper node.js模块,将一个对象映射到另一个对象

var objectMapper = require('object-mapper');
var map = {"foo": [{ key:"newfoo", transform: function(value){ return "##"+value;  }}]}
var data =  {"foo":"bar","baz":"blah"}
var dest = objectMapper(data, map);
变量
map
是动态的,会根据场景的不同而变化。 所以我可以有另一个翻译

{"foo": [{ key:"newfoo", transform: function(value){ return "$$"+value;  }}]}
我通过创建一个javascript文件map_tmpl.js保存所有模板

var tmpl_1= function () {return {"foo": [{ key:"newfoo", transform: function(value){ return "##"+value;  }}]};}
var tmpl_2= function () {return {"foo": [{ key:"newfoo", transform: function(value){ return "##"+value;  }}]};}
module.exports= {tmpl_1,tmpl_2}
我想将这些模板保存在数据库中,并在需要时从数据库中读取,
如果我将其存储为字符串并将其传递给objectmapper,则对象映射器无法正常工作,因为它需要一个对象,请建议解决此问题的最佳方法。

由于JSON对函数一无所知,您必须使用自定义序列化器和反序列化器来存储in/out数据库

var serializer = function(key, val) {
   if (typeof val === 'function') return val + '';      /* serialize function to string */
   return val;
};

var deserializer = function(key, val) {
   var reg = /^function\s*\(/;      /* match function string and deserialize back to function */
   if (typeof val === 'string' && reg.test(val)) {
      eval(`var fn = ${val}`);
      return fn;
   }
   return val;  
}
并以您的代码为例:

1) 保存到数据库中

var tmpl_1= function () {return {"foo": [{ key:"newfoo", transform: function(value){ return "##"+value;  }}]};}
var StringIntoDatabase = JSON.stringify(tmpl_1, serializer);
2) 从数据库中获取

var tmpl_1 = JSON.parse(StringFromDatabase, deserializer);
控制台快照:

对我来说很有效,但我不知道为什么会投否决票。反序列化程序中的语法错误,返回val,而不是v
var反序列化器=function(key,val){var reg=/^function\s*\(/;/*匹配函数字符串并反序列化回function*/if(typeof val=='string'&®.test(val)){eval(
var fn=${val}
);return fn;}return val;}
我想那是我的否决票,但我不记得我这么做了吗?我责备我的手机上的触摸屏过于敏感。我已经撤销了它。