我看到如何寫對象到文件中,如下所述:How can I save objects to files in Node.js?但是有沒有一種方法來獲取對象並以允許我將對象重新加載到內存中的方式編寫對象,包括其方法?將js對象寫入nodejs中的文件(包括方法)?
回答
正如@AnthonySottile之前所說的那樣,這可能是非常危險的,我不確定它有沒有好的用例,但只是爲了踢和咯咯,您需要編寫自己的遞歸序列化程序。事情是這樣的:
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();
}
這將處理大多數類型的,但總有一個古怪的搞亂它,以便生產我不會用這個機會。然後反序列化是那麼容易,因爲:
eval('var test = ' + dump_to_string(obj))
我最近寫shovejs:http://shovemedia.github.com/shovejs/處理正是這樣的事情。 YMMV - 我還沒有用Node試過它。
它將類型化的對象結構轉換爲JSON(然後將其保存到磁盤),並可將該結構充氣回類型化對象,包括正確的對象 - >對象引用等。爲了清楚起見,方法/類定義本身不是序列化的。系統只是期望在序列化期間可用的已註冊模型/工廠類在反序列化期間也可用。
事先道歉沒有發佈一些簡單的例子。
編輯:該技術是各式的採取什麼羅布W¯¯提到以下
的問題他的評論是很老,但我找不到任何地方的一些簡單的解決方案,以有效的序列化的問題JavaScript的。
可以使用BSON(MongoDB內部對象表示法),它使用二進制格式來表示內存中的對象。
我無法找到一些鏈接到文件,但code is well documented,我想出了這樣的事情:
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
這是coffee-script但是代碼非常簡單,大家理解。
小心使用'evalFunctions:true'選項,因爲它將允許JavaScript執行(請參閱https://gist.github.com/DinisCruz/245716893d783ea740ea) –
- 1. 將對象寫入文本文件的最佳方法
- 2. 將對象寫入文件
- 3. 將對象寫入MonoDroid中的文件
- 4. Nodejs將json寫入文件
- 5. 如何將數組寫入nodejs中的文件並保留方括號?
- 6. 無法從另一個js文件中的NodeJS出口對象
- 7. Java對象=方法?包括的例子
- 8. 如何將內存中的複雜對象寫入nodejs中的文件
- 9. 包括Node.js的.js文件
- 10. file_put_contents寫入包括到新的文件
- 11. 包括來自外部.js文件的對象
- 12. 的NodeJS /快遞包括本地的JS文件
- 13. JSON stringify對象,不包括方法
- 14. Nodejs寫入文件
- 15. C#重寫抽象方法(包括輸入參數)
- 16. 的PowerShell:無法將數據寫入到包含方括號
- 17. 的方法,以避免包括的js文件兩次
- 18. 如何在php中將方括號寫入文本文件?
- 19. 包括JSPX JS文件(JQuery的)文件
- 20. ASP.NET MVC - 包括JS文件
- 21. JS/PHP與包括文件
- 22. Rails包括.js文件
- 23. 包括一個js文件
- 24. 如何將兩個對象合併到一個對象中,包括方法
- 25. 將Java對象寫入文件
- 26. 將SUP類對象寫入文件
- 27. 將編碼對象寫入文件
- 28. 將java對象寫入CSV文件
- 29. 將AxShockwaveFlash Flash對象寫入文件C#
- 30. 將對象寫入文件輸出
書寫和閱讀功能給注射帶來巨大風險。我會考慮這個決定的安全影響。 –
我同意安東尼。但是,如果你真的需要它,你可以簡單地保存JavaScript代碼,然後加載它並調用'eval'。 – freakish
我同意安全問題。我只是在玩一個想法。謝謝! – luisgo