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