#javascript #node.js #deserialization #blockchain #solana
Вопрос:
Этому скрипту не удается десериализовать мой объект. Ошибка была TypeError: this.buf.readUInt32LE is not a function
TypeError: this.buf.readUInt32LE is not a function
at BinaryReader.readU32 (index.js:165)
at BinaryReader.propertyDescriptor.value (index.js:136)
at BinaryReader.readString (index.js:194)
at BinaryReader.propertyDescriptor.value (index.js:136)
at deserializeField (index.js:341)
at deserializeStruct (index.js:385)
at Object.deserialize (index.js:403)
at hello (App.js:52)
at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
at invokeGuardedCallback (react-dom.development.js:4056)
at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4070)
at executeDispatch (react-dom.development.js:8243)
at processDispatchQueueItemsInOrder (react-dom.development.js:8275)
at processDispatchQueue (react-dom.development.js:8288)
at dispatchEventsForPlugins (react-dom.development.js:8299)
at react-dom.development.js:8508
at batchedEventUpdates$1 (react-dom.development.js:22396)
at batchedEventUpdates (react-dom.development.js:3745)
at dispatchEventForPluginEventSystem (react-dom.development.js:8507)
at attemptToDispatchEvent (react-dom.development.js:6005)
at dispatchEvent (react-dom.development.js:5924)
at unstable_runWithPriority (scheduler.development.js:468)
at runWithPriority$1 (react-dom.development.js:11276)
at discreteUpdates$1 (react-dom.development.js:22413)
at discreteUpdates (react-dom.development.js:3756)
at dispatchDiscreteEvent (react-dom.development.js:5889)
Это отлично работает на CodeSandbox, но не работает на локальных компьютерах.
const borsh = require("borsh");
class Assignable {
constructor(properties) {
Object.keys(properties).map((key) => {
return (this[key] = properties[key]);
});
}
}
class Task extends Assignable { }
export default function App() {
const example = {
id: "12",
assignee: "Sai",
project_id: "ABX",
name: "Hello",
description: "Sample task Example",
status: "NOT DONE"
};
const schema = new Map([
[
Task,
{
kind: "struct",
fields: [
["id", "string"],
["name", "string"],
["description", "string"],
["assignee", "string"],
["project_id", "string"],
["status", "string"]
]
}
]
]);
function hello() {
const task = new Task({
id: example.id,
name: example.name,
description: example.description,
assignee: example.assignee,
project_id: example.project_id,
status: example.status
});
console.log(task);
const buf = borsh.serialize(schema, task);
console.log(buf);
try {
const newValue = borsh.deserialize(schema, Task, buf);
console.log(newValue);
} catch (error) {
console.log(error);
}
}
return (
<div className="APPLE">
<button onClick={hello}>Create</button>
</div>
);
}
Комментарии:
1. какую версию узла вы используете на своем компьютере? версия узла по умолчанию в codesandbox — 10.20.1
2. Я использую версию 16.9.1
3. Сколько строк содержит эта ошибка?
4. пожалуйста, попробуйте понизить версию вашего локального узла
5. Хорошо, я попробую это
Ответ №1:
Я просмотрел зависимости на странице codesandbox, и он глобально импортирует пакет буфера. Я пытался сделать то же самое локально require('buffer/')
, но безуспешно. Однако он работает, используя его как const Buffer = require('buffer/').Buffer
и вызывая метод Buffer.from
для получения буфера из сериализованных данных.
const Buffer = require('buffer/').Buffer
...
const buf = Buffer.from(borsh.serialize(schema, task));