Home | History | Annotate | Download | only in source
      1 Use in JavaScript    {#flatbuffers_guide_use_javascript}
      2 =================
      3 
      4 ## Before you get started
      5 
      6 Before diving into the FlatBuffers usage in JavaScript, it should be noted that
      7 the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to
      8 general FlatBuffers usage in all of the supported languages
      9 (including JavaScript). This page is specifically designed to cover the nuances
     10 of FlatBuffers usage in JavaScript.
     11 
     12 You should also have read the [Building](@ref flatbuffers_guide_building)
     13 documentation to build `flatc` and should be familiar with
     14 [Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
     15 [Writing a schema](@ref flatbuffers_guide_writing_schema).
     16 
     17 ## FlatBuffers JavaScript library code location
     18 
     19 The code for the FlatBuffers JavaScript library can be found at
     20 `flatbuffers/js`. You can browse the library code on the [FlatBuffers
     21 GitHub page](https://github.com/google/flatbuffers/tree/master/js).
     22 
     23 ## Testing the FlatBuffers JavaScript library
     24 
     25 The code to test the JavaScript library can be found at `flatbuffers/tests`.
     26 The test code itself is located in [JavaScriptTest.js](https://github.com/
     27 google/flatbuffers/blob/master/tests/JavaScriptTest.js).
     28 
     29 To run the tests, use the [JavaScriptTest.sh](https://github.com/google/
     30 flatbuffers/blob/master/tests/JavaScriptTest.sh) shell script.
     31 
     32 *Note: The JavaScript test file requires [Node.js](https://nodejs.org/en/).*
     33 
     34 ## Using the FlatBuffers JavaScript libary
     35 
     36 *Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
     37 example of how to use FlatBuffers in JavaScript.*
     38 
     39 FlatBuffers supports both reading and writing FlatBuffers in JavaScript.
     40 
     41 To use FlatBuffers in your own code, first generate JavaScript classes from your
     42 schema with the `--js` option to `flatc`. Then you can include both FlatBuffers
     43 and the generated code to read or write a FlatBuffer.
     44 
     45 For example, here is how you would read a FlatBuffer binary file in Javascript:
     46 First, include the library and generated code. Then read the file into an
     47 `Uint8Array`. Make a `flatbuffers.ByteBuffer` out of the `Uint8Array`, and pass
     48 the ByteBuffer to the `getRootAsMonster` function.
     49 
     50 *Note: Both JavaScript module loaders (e.g. Node.js) and browser-based
     51 HTML/JavaScript code segments are shown below in the following snippet:*
     52 
     53 ~~~{.js}
     54   // Note: These require functions are specific to JavaScript module loaders
     55   //       (namely, Node.js). See below for a browser-based example.
     56   var fs = require('fs');
     57 
     58   var flatbuffers = require('../flatbuffers').flatbuffers;
     59   var MyGame = require('./monster_generated').MyGame;
     60 
     61   var data = new Uint8Array(fs.readFileSync('monster.dat'));
     62   var buf = new flatbuffers.ByteBuffer(data);
     63 
     64   var monster = MyGame.Example.Monster.getRootAsMonster(buf);
     65 
     66   //--------------------------------------------------------------------------//
     67 
     68   // Note: This code is specific to browser-based HTML/JavaScript. See above
     69   //       for the code using JavaScript module loaders (e.g. Node.js).
     70   <script src="../js/flatbuffers.js"></script>
     71   <script src="monster_generated.js"></script>
     72   <script>
     73     function readFile() {
     74       var reader = new FileReader(); // This example uses the HTML5 FileReader.
     75       var file = document.getElementById(
     76           'file_input').files[0]; // "monster.dat" from the HTML <input> field.
     77 
     78       reader.onload = function() { // Executes after the file is read.
     79         var data = new Uint8Array(reader.result);
     80 
     81         var buf = new flatbuffers.ByteBuffer(data);
     82 
     83         var monster = MyGame.Example.Monster.getRootAsMonster(buf);
     84       }
     85 
     86       reader.readAsArrayBuffer(file);
     87     }
     88   </script>
     89 
     90   // Open the HTML file in a browser and select "monster.dat" from with the
     91   // <input> field.
     92   <input type="file" id="file_input" onchange="readFile();">
     93 ~~~
     94 
     95 Now you can access values like this:
     96 
     97 ~~~{.js}
     98   var hp = monster.hp();
     99   var pos = monster.pos();
    100 ~~~
    101 
    102 ## Text parsing FlatBuffers in JavaScript
    103 
    104 There currently is no support for parsing text (Schema's and JSON) directly
    105 from JavaScript.
    106