All Apache Thrift tutorials require that you have:
Generated the tutorial.thrift and shared.thrift files:
thrift -r --gen js:node tutorial.thrift
Followed all prerequisites listed below.
var thrift = require('thrift'); var Calculator = require('./gen-nodejs/Calculator'); var ttypes = require('./gen-nodejs/tutorial_types'); const assert = require('assert'); var transport = thrift.TBufferedTransport; var protocol = thrift.TBinaryProtocol; var connection = thrift.createConnection("localhost", 9090, { transport : transport, protocol : protocol }); connection.on('error', function(err) { assert(false, err); }); // Create a Calculator client with the connection var client = thrift.createClient(Calculator, connection); client.ping(function(err, response) { console.log('ping()'); }); client.add(1,1, function(err, response) { console.log("1+1=" + response); }); work = new ttypes.Work(); work.op = ttypes.Operation.DIVIDE; work.num1 = 1; work.num2 = 0; client.calculate(1, work, function(err, message) { if (err) { console.log("InvalidOperation " + err); } else { console.log('Whoa? You know how to divide by zero?'); } }); work.op = ttypes.Operation.SUBTRACT; work.num1 = 15; work.num2 = 10; client.calculate(1, work, function(err, message) { console.log('15-10=' + message); client.getStruct(1, function(err, message){ console.log('Check log: ' + message.value); //close the connection once we're done connection.end(); }); });
var thrift = require("thrift"); var Calculator = require("./gen-nodejs/Calculator"); var ttypes = require("./gen-nodejs/tutorial_types"); var SharedStruct = require("./gen-nodejs/shared_types").SharedStruct; var data = {}; var server = thrift.createServer(Calculator, { ping: function(result) { console.log("ping()"); result(null); }, add: function(n1, n2, result) { console.log("add(", n1, ",", n2, ")"); result(null, n1 + n2); }, calculate: function(logid, work, result) { console.log("calculate(", logid, ",", work, ")"); var val = 0; if (work.op == ttypes.Operation.ADD) { val = work.num1 + work.num2; } else if (work.op === ttypes.Operation.SUBTRACT) { val = work.num1 - work.num2; } else if (work.op === ttypes.Operation.MULTIPLY) { val = work.num1 * work.num2; } else if (work.op === ttypes.Operation.DIVIDE) { if (work.num2 === 0) { var x = new ttypes.InvalidOperation(); x.whatOp = work.op; x.why = 'Cannot divide by 0'; result(x); return; } val = work.num1 / work.num2; } else { var x = new ttypes.InvalidOperation(); x.whatOp = work.op; x.why = 'Invalid operation'; result(x); return; } var entry = new SharedStruct(); entry.key = logid; entry.value = ""+val; data[logid] = entry; result(null, val); }, getStruct: function(key, result) { console.log("getStruct(", key, ")"); result(null, data[key]); }, zip: function() { console.log("zip()"); } }); server.listen(9090);