You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Martin Tzvetanov Grigorov (Jira)" <ji...@apache.org> on 2022/01/31 07:26:00 UTC

[jira] [Updated] (AVRO-3322) JavaScript: Buffer is not defined in browser environment

     [ https://issues.apache.org/jira/browse/AVRO-3322?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Tzvetanov Grigorov updated AVRO-3322:
--------------------------------------------
    Summary: JavaScript: Buffer is not defined in browser environment  (was: Buffer is not defined in browser environment)

> JavaScript: Buffer is not defined in browser environment
> --------------------------------------------------------
>
>                 Key: AVRO-3322
>                 URL: https://issues.apache.org/jira/browse/AVRO-3322
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: js
>         Environment: Firefox 96 & Brave 1.34(based on chromium)
>            Reporter: ruleeeer
>            Assignee: Martin Tzvetanov Grigorov
>            Priority: Blocker
>              Labels: pull-request-available
>             Fix For: 1.11.1, 1.12.0
>
>         Attachments: image-2022-01-25-15-57-43-468.png
>
>          Time Spent: 3h 10m
>  Remaining Estimate: 0h
>
> When I use avro in my browser, I find that I get the `Buffer is undefined error`
> !image-2022-01-25-15-57-43-468.png!
> The code I use is simple, it comes from the github repository readme.md
> {code:javascript}
> var avro = require('avro-js');
> var type = avro.parse({
>   name: 'Pet',
>   type: 'record',
>   fields: [
>     {name: 'kind', type: {name: 'Kind', type: 'enum', symbols: ['CAT', 'DOG']}},
>     {name: 'name', type: 'string'}
>   ]
> });
> var pet = {kind: 'CAT', name: 'Albert'};
> var buf = type.toBuffer(pet); // Serialized object.
> var obj = type.fromBuffer(buf); // {kind: 'CAT', name: 'Albert'}
> {code}
> Later I traced the source code and found that Buffer is used directly in `/etc/browser/avro.js` and `/lib/schema.js`, which is not a problem in the node environment because the Buffer object is mounted globally, but it is a problem in the browser environment because using buffer polyfill will not mount the Buffer object globally, You need to  declare `var Buffer = require('buffer').Buffer` manually, so that it can be used in the browser environment without affecting the node environment, which also gets its Buffer from require('buffer').



--
This message was sent by Atlassian Jira
(v8.20.1#820001)