blob: 2f8db0f10e4e33902e7b2d2d9566cf4dd6f1f5b3 [file] [log] [blame]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta content="en-us" http-equiv="Content-Language" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/static/images/favicon.ico" rel="shortcut icon" />
<link href="/static/css/style.css" rel="stylesheet" type="text/css" />
<link href="/static/css/codehilite.css" rel="stylesheet" type="text/css" />
<link href="/static/css/bootstrap.css" media="screen, projection" rel="stylesheet" type="text/css" />
<link href="/static/css/thrift.css" media="screen, projection" rel="stylesheet" type="text/css" />
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/bootstrap-dropdown.js"></script>
<script src="/static/js/bootstrap-tab.js"></script>
<script src="/static/js/thrift.js"></script>
<title>Apache Thrift - Node.js</title>
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="/">Apache Thrift &trade;</a>
<div class="nav-collapse">
<ul class="nav pull-right">
<li><a href="/download">Download</a></li>
<li><a href="/docs">Documentation</a></li>
<li><a href="/developers">Developers</a></li>
<li><a href="/lib">Libraries</a></li>
<li><a href="/tutorial">Tutorial</a></li>
<li><a href="/test">Test Suite</a></li>
<li><a href="/about">About</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="http://www.apache.org/" target="_blank">Apache Home</a></li>
<li><a href="http://www.apache.org/licenses/" target="_blank">Apache License v2.0</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Donate</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
<li><a href="http://www.apache.org/security/" target="_blank">Security</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<h2>Node.js Tutorial</h2>
<h3>Introduction</h3>
<p>
All Apache Thrift tutorials require that you have:
<ol>
<li>The Apache Thrift Compiler and Libraries, see <a href="/download">Download</a> and <a href="/docs/BuildingFromSource">Building from Source</a> for more details.</li>
<li>Generated the <a href="https://github.com/apache/thrift/blob/master/tutorial/tutorial.thrift">tutorial.thrift</a> and <a href="https://github.com/apache/thrift/blob/master/tutorial/shared.thrift">shared.thrift</a> files:<br>
<pre><code>thrift -r --gen js:node tutorial.thrift</code></pre>
</li>
<li>Followed all prerequisites listed below.</li>
</ol>
<h3 id="prerequisites">Prerequisites</h3>
<h3 id="client">Client</h3>
<div class="highlight"><pre class="codehilite"><code><span class="kd">var</span> <span class="nx">Calculator</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./gen-nodejs/Calculator</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">ttypes</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./gen-nodejs/tutorial_types</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">assert</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">assert</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">transport</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">TBufferedTransport</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">protocol</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">TBinaryProtocol</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">connection</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createConnection</span><span class="p">(</span><span class="dl">"</span><span class="s2">localhost</span><span class="dl">"</span><span class="p">,</span> <span class="mi">9090</span><span class="p">,</span> <span class="p">{</span>
<span class="na">transport</span> <span class="p">:</span> <span class="nx">transport</span><span class="p">,</span>
<span class="na">protocol</span> <span class="p">:</span> <span class="nx">protocol</span>
<span class="p">});</span>
<span class="nx">connection</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="dl">'</span><span class="s1">error</span><span class="dl">'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">(</span><span class="kc">false</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
<span class="p">});</span>
<span class="c1">// Create a Calculator client with the connection</span>
<span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createClient</span><span class="p">(</span><span class="nx">Calculator</span><span class="p">,</span> <span class="nx">connection</span><span class="p">);</span>
<span class="nx">client</span><span class="p">.</span><span class="nx">ping</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">ping()</span><span class="dl">'</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">client</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">1+1=</span><span class="dl">"</span> <span class="o">+</span> <span class="nx">response</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">work</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Work</span><span class="p">();</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">=</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">DIVIDE</span><span class="p">;</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">num2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="nx">client</span><span class="p">.</span><span class="nx">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">InvalidOperation </span><span class="dl">"</span> <span class="o">+</span> <span class="nx">err</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Whoa? You know how to divide by zero?</span><span class="dl">'</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">});</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">=</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">SUBTRACT</span><span class="p">;</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">=</span> <span class="mi">15</span><span class="p">;</span>
<span class="nx">work</span><span class="p">.</span><span class="nx">num2</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
<span class="nx">client</span><span class="p">.</span><span class="nx">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">15-10=</span><span class="dl">'</span> <span class="o">+</span> <span class="nx">message</span><span class="p">);</span>
<span class="nx">client</span><span class="p">.</span><span class="nx">getStruct</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">){</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">'</span><span class="s1">Check log: </span><span class="dl">'</span> <span class="o">+</span> <span class="nx">message</span><span class="p">.</span><span class="nx">value</span><span class="p">);</span>
<span class="c1">//close the connection once we're done</span>
<span class="nx">connection</span><span class="p">.</span><span class="nx">end</span><span class="p">();</span>
<span class="p">});</span>
<span class="p">});</span>
</code></pre></div>
<p class="snippet_footer">This snippet was generated by Apache Thrift's <strong>source tree docs</strong>:
<a href="https://gitbox.apache.org/repos/asf?p=thrift.git;a=blob;hb=HEAD;f=tutorial/nodejs/NodeClient.js">tutorial/nodejs/NodeClient.js</a>
</p>
<h3 id="server">Server</h3>
<div class="highlight"><pre class="codehilite"><code><span class="kd">var</span> <span class="nx">Calculator</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">./gen-nodejs/Calculator</span><span class="dl">"</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">ttypes</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">./gen-nodejs/tutorial_types</span><span class="dl">"</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">SharedStruct</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">./gen-nodejs/shared_types</span><span class="dl">"</span><span class="p">).</span><span class="nx">SharedStruct</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">{};</span>
<span class="kd">var</span> <span class="nx">server</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createServer</span><span class="p">(</span><span class="nx">Calculator</span><span class="p">,</span> <span class="p">{</span>
<span class="na">ping</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">ping()</span><span class="dl">"</span><span class="p">);</span>
<span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
<span class="p">},</span>
<span class="na">add</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">n1</span><span class="p">,</span> <span class="nx">n2</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">add(</span><span class="dl">"</span><span class="p">,</span> <span class="nx">n1</span><span class="p">,</span> <span class="dl">"</span><span class="s2">,</span><span class="dl">"</span><span class="p">,</span> <span class="nx">n2</span><span class="p">,</span> <span class="dl">"</span><span class="s2">)</span><span class="dl">"</span><span class="p">);</span>
<span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">n1</span> <span class="o">+</span> <span class="nx">n2</span><span class="p">);</span>
<span class="p">},</span>
<span class="na">calculate</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">logid</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">calculate(</span><span class="dl">"</span><span class="p">,</span> <span class="nx">logid</span><span class="p">,</span> <span class="dl">"</span><span class="s2">,</span><span class="dl">"</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="dl">"</span><span class="s2">)</span><span class="dl">"</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">val</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">==</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">ADD</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">+</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num2</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">===</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">SUBTRACT</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">-</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num2</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">===</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">MULTIPLY</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">*</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num2</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">===</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">DIVIDE</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">work</span><span class="p">.</span><span class="nx">num2</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">InvalidOperation</span><span class="p">();</span>
<span class="nx">x</span><span class="p">.</span><span class="nx">whatOp</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">op</span><span class="p">;</span>
<span class="nx">x</span><span class="p">.</span><span class="nx">why</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">Cannot divide by 0</span><span class="dl">'</span><span class="p">;</span>
<span class="nx">result</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">/</span> <span class="nx">work</span><span class="p">.</span><span class="nx">num2</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">InvalidOperation</span><span class="p">();</span>
<span class="nx">x</span><span class="p">.</span><span class="nx">whatOp</span> <span class="o">=</span> <span class="nx">work</span><span class="p">.</span><span class="nx">op</span><span class="p">;</span>
<span class="nx">x</span><span class="p">.</span><span class="nx">why</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">Invalid operation</span><span class="dl">'</span><span class="p">;</span>
<span class="nx">result</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">entry</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">SharedStruct</span><span class="p">();</span>
<span class="nx">entry</span><span class="p">.</span><span class="nx">key</span> <span class="o">=</span> <span class="nx">logid</span><span class="p">;</span>
<span class="nx">entry</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="dl">""</span><span class="o">+</span><span class="nx">val</span><span class="p">;</span>
<span class="nx">data</span><span class="p">[</span><span class="nx">logid</span><span class="p">]</span> <span class="o">=</span> <span class="nx">entry</span><span class="p">;</span>
<span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">val</span><span class="p">);</span>
<span class="p">},</span>
<span class="na">getStruct</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">getStruct(</span><span class="dl">"</span><span class="p">,</span> <span class="nx">key</span><span class="p">,</span> <span class="dl">"</span><span class="s2">)</span><span class="dl">"</span><span class="p">);</span>
<span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">data</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span>
<span class="p">},</span>
<span class="na">zip</span><span class="p">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">zip()</span><span class="dl">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">});</span>
<span class="nx">server</span><span class="p">.</span><span class="nx">listen</span><span class="p">(</span><span class="mi">9090</span><span class="p">);</span>
</code></pre></div>
<p class="snippet_footer">This snippet was generated by Apache Thrift's <strong>source tree docs</strong>:
<a href="https://gitbox.apache.org/repos/asf?p=thrift.git;a=blob;hb=HEAD;f=tutorial/nodejs/NodeServer.js">tutorial/nodejs/NodeServer.js</a>
</p>
<h2 id="additional-information">Additional Information</h2>
</div>
<div class="container">
<hr>
<footer class="footer">
<div class="row">
<div class="span3">
<h3>Links</h3>
<ul class="unstyled">
<li><a href="/download">Download</a></li>
<li><a href="/developers">Developers</a></li>
<li><a href="/tutorial">Tutorials</a></li>
</ul>
<ul class="unstyled">
<li><a href="/sitemap">Sitemap</a></li>
</ul>
</div>
<div class="span3">
<h3>Get Involved</h3>
<ul class="unstyled">
<li><a href="/mailing">Mailing Lists</a></li>
<li><a href="http://issues.apache.org/jira/browse/THRIFT">Issue Tracking</a></li>
<li><a href="/docs/HowToContribute">How To Contribute</a></li>
</ul>
</div>
<div class="span6">
<a href="http://www.apache.org/"><img src="/static/images/feather.svg" onerror="this.src='/static/images/feather.png';this.onerror=null;" /></a>
Copyright &copy; 2024 <a href="http://www.apache.org/">Apache Software Foundation</a>.
Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>.
Apache, Apache Thrift, and the Apache feather logo are trademarks of The Apache Software Foundation.
</div>
</div>
</footer>
</div>
</body>
</html>