node.js将objectmapperstring转换为javascript对象

使用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); 

variablesmap是dynamic的,并且会根据场景情况而有所不同。 所以我可以有另一个翻译为

 {"foo": [{ key:"newfoo", transform: function(value){ return "$$"+value; }}]} 

我通过创build一个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} 

我想保存这些模板在数据库中,并在需要时从数据库中读取,如果我把它存储为string,并将其传递给objectmapper,object-mapper不能正常工作,因为它期望一个对象,请解决这个问题的最好方法。

由于JSON对函数一无所知,因此您必须使用自定义串行器和解串器来存储数据库。

 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); 

控制台快照: 在这里输入图像说明