README.md
1Thrift Javascript Library
2=========================
3This browser based Apache Thrift implementation supports
4RPC clients using the JSON protocol over Http[s] with XHR
5and WebSocket.
6
7License
8-------
9Licensed to the Apache Software Foundation (ASF) under one
10or more contributor license agreements. See the NOTICE file
11distributed with this work for additional information
12regarding copyright ownership. The ASF licenses this file
13to you under the Apache License, Version 2.0 (the
14"License"); you may not use this file except in compliance
15with the License. You may obtain a copy of the License at
16
17 http://www.apache.org/licenses/LICENSE-2.0
18
19Unless required by applicable law or agreed to in writing,
20software distributed under the License is distributed on an
21"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
22KIND, either express or implied. See the License for the
23specific language governing permissions and limitations
24under the License.
25
26Grunt Build
27------------
28This is the base directory for the Apache Thrift JavaScript
29library. This directory contains a Gruntfile.js and a
30package.json. Many of the build and test tools used here
31require a recent version of Node.js to be installed. To
32install the support files for the Grunt build tool execute
33the command:
34
35 npm install
36
37This reads the package.json and pulls in the appropriate
38sources from the internet. To build the JavaScript branch
39of Apache Thrift execute the command:
40
41 npx grunt
42
43This runs the grunt build tool (from within `./node_modules/.bin/`),
44linting all of the source files, setting up and running the
45tests, concatenating and minifying the main libraries and
46generating the html documentation.
47
48Tree
49----
50The following directories are present (some only after the
51grunt build):
52 /src - The JavaScript Apache Thrift source
53 /doc - HTML documentation
54 /dist - Distribution files (thrift.js and thrift.min.js)
55 /test - Various tests, this is a good place to look for
56 example code
57 /node_modules - Build support files installed by npm
58
59
60Example JavaScript Client and Server
61------------------------------------
62The listing below demonstrates a simple browser based JavaScript
63Thrift client and Node.js JavaScript server for the hello_svc
64service.
65
66### hello.thrift - Service IDL
67### build with: $ thrift -gen js -gen js:node hello.thrift
68 service hello_svc {
69 string get_message(1: string name)
70 }
71
72### hello.html - Browser Client
73 <!DOCTYPE html>
74 <html lang="en">
75 <head>
76 <meta charset="utf-8">
77 <title>Hello Thrift</title>
78 </head>
79 <body>
80 Name: <input type="text" id="name_in">
81 <input type="button" id="get_msg" value="Get Message" >
82 <div id="output"></div>
83
84 <script src="thrift.js"></script>
85 <script src="gen-js/hello_svc.js"></script>
86 <script>
87 (function() {
88 var transport = new Thrift.TXHRTransport("/hello");
89 var protocol = new Thrift.TJSONProtocol(transport);
90 var client = new hello_svcClient(protocol);
91 var nameElement = document.getElementById("name_in");
92 var outputElement = document.getElementById("output");
93 document.getElementById("get_msg")
94 .addEventListener("click", function(){
95 client.get_message(nameElement.value, function(result) {
96 outputElement.innerHTML = result;
97 });
98 });
99 })();
100 </script>
101 </body>
102 </html>
103
104### hello.js - Node Server
105 var thrift = require('thrift');
106 var hello_svc = require('./gen-nodejs/hello_svc.js');
107
108 var hello_handler = {
109 get_message: function(name, result) {
110 var msg = "Hello " + name + "!";
111 result(null, msg);
112 }
113 }
114
115 var hello_svc_opt = {
116 transport: thrift.TBufferedTransport,
117 protocol: thrift.TJSONProtocol,
118 processor: hello_svc,
119 handler: hello_handler
120 };
121
122 var server_opt = {
123 staticFilePath: ".",
124 services: {
125 "/hello": hello_svc_opt
126 }
127 }
128
129 var server = Thrift.createWebServer(server_opt);
130 var port = 9099;
131 server.listen(port);
132 console.log("Http/Thrift Server running on port: " + port);
133
134
135TypeScript
136------------------------------------
137TypeScript definition files can also be generated by running:
138
139 thrift --gen js:ts file.thrift
140
141# Breaking Changes
142
143## 0.13.0
144
1451. 64-bit integer constants are now generatd using node-int64 e.g.: var x = new Int64("7fffffffffffffff");
146