将js对象写入nodejs中的文件(包括方法)?

我看到如何写对象到文件如下所述: 我如何将对象保存到Node.js中的文件? 但有没有一种方法来取得一个对象,并以允许我将对象重新加载到内存中的方式写入对象,包括其方法?

正如@AnthonySottile之前所说,这可能是非常危险的,我不确定有没有一个好的用例,但只是踢和咯咯,你将需要编写自己的recursion串行器。 像这样的东西:

 var toString = Object.prototype.toString; function dump_object(obj) { var buff, prop; buff = []; for (prop in obj) { buff.push(dump_to_string(prop) + ': ' + dump_to_string(obj[prop])) } return '{' + buff.join(', ') + '}'; } function dump_array(arr) { var buff, i, len; buff = []; for (i=0, len=arr.length; i<len; i++) { buff.push(dump_to_string(arr[i])); } return '[' + buff.join(', ') + ']'; } function dump_to_string(obj) { if (toString.call(obj) == '[object Function]') { return obj.toString(); } else if (toString.call(obj) == '[object Array]') { return dump_array(obj); } else if (toString.call(obj) == '[object String]') { return '"' + obj.replace('"', '\\"') + '"'; } else if (obj === Object(obj)) { return dump_object(obj); } return obj.toString(); } 

这将处理大多数types,但总是有古怪的混乱的机会,所以我不会在生产中使用它 。 之后的反序列化就像下面这样简单:

 eval('var test = ' + dump_to_string(obj)) 

这个问题是相当古老的,但我找不到任何地方一些简单的解决scheme的JavaScript有效的序列化问题。
可以使用BSON (MongoDB内部对象表示),它使用二进制格式来表示内存中的对象。

我找不到文档的一些链接,但是代码是有据可查的 ,我想到了这样的东西:

 fs = require 'fs' bson = require('bson').BSONPure.BSON obj = { string: "test", func: (s) -> console.log s } fs.writeFile 'test.txt', bson.serialize(obj, false, false, true), (err) -> return console.log("Err : #{err}") if err fs.readFile 'test.txt', (err, file) -> return console.log("Err : #{err}") if err deserialized = bson.deserialize file, evalFunctions: true deserialized.func deserialized.string // Outputs 'text', as expected 

这是咖啡脚本,但代码很简单,每个人都可以理解。

我最近写了shovejs: http ://shovemedia.github.com/shovejs/来处理这种事情。 YMMV – 我还没有尝试过与节点呢。

它将一个types化的对象结构转换为JSON(然后将其保存到磁盘),并将该结构充填到types化的对象中,包括适当的对象 – >对象引用等。为了清楚起见,方法/类定义本身不被序列化。 系统只是期望在序列化期间可用的已注册模型/工厂类在反序列化期间也是可用的。

提前抱歉没有发布一些简单的例子。

编辑:这个技巧是Rob W在下面的评论中提到的