在 Python 中,pickle 函数允许你存储任何任意类型的数据,以便以后原样恢复它们。pickle 的一个常见用法是将一个完全实例化的对象进行 pickle 处理,以便以后使用。例如,你有一个 AMQP Message 对象,它不是可序列化的,你想将它存储在会话存储中并检索它,此时你可以使用 pickle 来实现。但需要注意的是,你需要在对象上调用一个方法,而不仅仅是为了获取数据。
但是在 Node.js 中,没有 pickle 的直接等价物。然而,Node.js 提供了许多底层库,因此肯定有某种方法可以保存此对象,以便它可以在 Web 调用之间持久存在。
具体用例是这样的:一个网页接收了一个 RabbitMQ 消息,并显示从中派生出的信息。你想在对消息执行操作之后再确认消息。通常情况下,你可以直接将数据保存在会话状态中,但这只在你可以以原始形式保存数据的情况下才可行。
2、解决方案
方法一:使用 pickle-js 项目
pickle-js 项目是一个使用 JavaScript 实现的 Python pickle 格式。它支持 pickles,其中包含原始类型的一个跨语言子集。pickle.js 与 pickle.py 之间的主要区别包括:
- 文本 pickles 仅支持一些类型,其中某些类型会以有损方式进行转换(例如 int)。
- 某些类型不受支持(例如 class)。
更多信息,请访问:code.google.com/p/pickle-js… www.jshk.com.cn/mb/reg.asp?…
方法二:使用 hydration 模块
hydration 是一个 Node.js 模块,它提供了一种将 JavaScript 对象序列化为 JSON 并将其存储在数据库中的方式。然后,你可以从数据库中检索 JSON 并将其反序列化回 JavaScript 对象。
hydration 模块不是 pickle 的完全等价物,但它可以提供类似的功能。使用 hydration 模块,你可以将 AMQP Message 对象序列化为 JSON,然后将其存储在会话存储中。当需要时,你可以从会话存储中检索 JSON 并将其反序列化回 AMQP Message 对象。
更多信息,请访问:github.com/carlos8f/hy…
代码示例
// 使用 pickle-js 将 AMQP Message 对象序列化为 JSON
const pickle = require('pickle-js');
const message = {
// AMQP Message 对象的属性
};
const json = pickle.dumps(message);
// 将 JSON 字符串存储在会话存储中
req.session.message = json;
// 从会话存储中检索 JSON 字符串
const json = req.session.message;
// 使用 pickle-js 将 JSON 字符串反序列化为 AMQP Message 对象
const message = pickle.loads(json);
// 在对象上调用方法
message.doSomething();
// 使用 hydration 模块将 AMQP Message 对象序列化为 JSON
const hydration = require('hydration');
const message = {
// AMQP Message 对象的属性
};
const json = hydration.stringify(message);
// 将 JSON 字符串存储在会话存储中
req.session.message = json;
// 从会话存储中检索 JSON 字符串
const json = req.session.message;
// 使用 hydration 模块将 JSON 字符串反序列化为 AMQP Message 对象
const message = hydration.parse(json);
// 在对象上调用方法
message.doSomething();
在 Python 中,pickle 函数允许你存储任何任意类型的数据,以便以后原样恢复它们。pickle 的一个常见用法是将一个完全实例化的对象进行 pickle 处理,以便以后使用。例如,你有一个 AMQP Message 对象,它不是可序列化的,你想将它存储在会话存储中并检索它,此时你可以使用 pickle 来实现。但需要注意的是,你需要在对象上调用一个方法,而不仅仅是为了获取数据。
但是在 Node.js 中,没有 pickle 的直接等价物。然而,Node.js 提供了许多底层库,因此肯定有某种方法可以保存此对象,以便它可以在 Web 调用之间持久存在。
具体用例是这样的:一个网页接收了一个 RabbitMQ 消息,并显示从中派生出的信息。你想在对消息执行操作之后再确认消息。通常情况下,你可以直接将数据保存在会话状态中,但这只在你可以以原始形式保存数据的情况下才可行。
## 2、解决方案
### 方法一:使用 pickle-js 项目
pickle-js 项目是一个使用 JavaScript 实现的 Python pickle 格式。它支持 pickles,其中包含原始类型的一个跨语言子集。pickle.js 与 pickle.py 之间的主要区别包括:
- 文本 pickles 仅支持一些类型,其中某些类型会以有损方式进行转换(例如 int)。
- 某些类型不受支持(例如 class)。
更多信息,请访问:https://code.google.com/p/pickle-js/
### 方法二:使用 hydration 模块
hydration 是一个 Node.js 模块,它提供了一种将 JavaScript 对象序列化为 JSON 并将其存储在数据库中的方式。然后,你可以从数据库中检索 JSON 并将其反序列化回 JavaScript 对象。
hydration 模块不是 pickle 的完全等价物,但它可以提供类似的功能。使用 hydration 模块,你可以将 AMQP Message 对象序列化为 JSON,然后将其存储在会话存储中。当需要时,你可以从会话存储中检索 JSON 并将其反序列化回 AMQP Message 对象。
更多信息,请访问:https://github.com/carlos8f/hydration
### 代码示例
```js
// 使用 pickle-js 将 AMQP Message 对象序列化为 JSON
const pickle = require('pickle-js');
const message = {
// AMQP Message 对象的属性
};
const json = pickle.dumps(message);
// 将 JSON 字符串存储在会话存储中
req.session.message = json;
// 从会话存储中检索 JSON 字符串
const json = req.session.message;
// 使用 pickle-js 将 JSON 字符串反序列化为 AMQP Message 对象
const message = pickle.loads(json);
// 在对象上调用方法
message.doSomething();
```
```js
// 使用 hydration 模块将 AMQP Message 对象序列化为 JSON
const hydration = require('hydration');
const message = {
// AMQP Message 对象的属性
};
const json = hydration.stringify(message);
// 将 JSON 字符串存储在会话存储中
req.session.message = json;
// 从会话存储中检索 JSON 字符串
const json = req.session.message;
// 使用 hydration 模块将 JSON 字符串反序列化为 AMQP Message 对象
const message = hydration.parse(json);
// 在对象上调用方法
message.doSomething();
```
````