<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dapr Jobs JavaScript SDK on Dapr Docs</title><link>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/</link><description>Recent content in Dapr Jobs JavaScript SDK on Dapr Docs</description><generator>Hugo</generator><language>en</language><atom:link href="https://docs.dapr.io/developing-applications/sdks/js/js-jobs/index.xml" rel="self" type="application/rss+xml"/><item><title>How to: Author and manage Dapr Jobs using the JavaScript SDK</title><link>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-howto/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-howto/</guid><description>&lt;p>Let&amp;rsquo;s register an endpoint to receive a job notification, then schedule the job from the same application. This guide uses &lt;code>DaprServer.jobs&lt;/code> for callbacks and its embedded &lt;code>DaprClient.jobs&lt;/code> for job management. There is no separate Jobs client package to install.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://docs.dapr.io/getting-started/install-dapr-cli/">Dapr CLI&lt;/a>&lt;/li>
&lt;li>An initialized &lt;a href="https://docs.dapr.io/getting-started/install-dapr-selfhost/">Dapr environment&lt;/a> with &lt;strong>Dapr runtime 1.16 or later&lt;/strong> and the &lt;a href="https://docs.dapr.io/concepts/dapr-services/scheduler/">Scheduler service&lt;/a> running&lt;/li>
&lt;li>&lt;a href="https://nodejs.org/">Node.js&lt;/a> 18 or later&lt;/li>
&lt;li>The &lt;a href="https://www.npmjs.com/package/@dapr/dapr">&lt;code>@dapr/dapr&lt;/code>&lt;/a> package, &lt;strong>version 3.19.0 or later&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>In your application directory, initialize an npm project if needed and install the SDK:&lt;/p></description></item><item><title>Build cron schedules using the JavaScript SDK</title><link>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-cron/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-cron/</guid><description>&lt;p>Use a cron schedule for calendar-based jobs, such as a report at 09:30 every weekday. The JavaScript SDK accepts a raw schedule string or a &lt;code>CronExpressionBuilder&lt;/code> directly in &lt;code>JobOptions.schedule&lt;/code>. These examples target &lt;strong>&lt;code>@dapr/dapr&lt;/code> 3.19.0 or later&lt;/strong>.&lt;/p>
&lt;h2 id="provide-a-schedule-string">Provide a schedule string&lt;/h2>
&lt;p>Dapr cron expressions use &lt;strong>six fields, including seconds&lt;/strong>, not the five fields used by many Unix cron tools:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">second minute hour dayOfMonth month dayOfWeek
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, &lt;code>&amp;quot;0 30 9 * * 1-5&amp;quot;&lt;/code> runs at 09:30 on weekdays. Sunday is &lt;code>0&lt;/code> and Saturday is &lt;code>6&lt;/code>.&lt;/p></description></item><item><title>JavaScript Jobs client and callback usage</title><link>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-client-usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-client-usage/</guid><description>&lt;p>Jobs is part of &lt;code>DaprClient&lt;/code> and &lt;code>DaprServer&lt;/code> in &lt;strong>&lt;code>@dapr/dapr&lt;/code> 3.19.0 or later&lt;/strong>. Use &lt;code>client.jobs&lt;/code> to manage scheduled jobs and &lt;code>server.jobs&lt;/code> to register callbacks. The &lt;a href="https://docs.dapr.io/developing-applications/sdks/js/js-jobs/js-jobs-howto/">how-to guide&lt;/a> contains a complete runnable application.&lt;/p>
&lt;h2 id="client-configuration-and-lifetime">Client configuration and lifetime&lt;/h2>
&lt;p>Create a long-lived &lt;code>DaprClient&lt;/code> rather than a new client for every operation. Jobs uses the client&amp;rsquo;s existing sidecar connection and API token:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">CommunicationProtocolEnum&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">DaprClient&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;@dapr/dapr&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">DaprClient&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">daprHost&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;127.0.0.1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">daprPort&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;50001&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">communicationProtocol&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">CommunicationProtocolEnum&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">GRPC&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">daprApiToken&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">process&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">DAPR_API_TOKEN&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">start&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">jobs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">schedule&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;cleanup&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">dueTime&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;1h&amp;#34;&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">jobs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;cleanup&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">job&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">jobs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="k">delete&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;cleanup&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="k">finally&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">stop&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For HTTP, use &lt;code>CommunicationProtocolEnum.HTTP&lt;/code> and the sidecar&amp;rsquo;s HTTP port, normally &lt;code>&amp;quot;3500&amp;quot;&lt;/code>. Client-only management does not require an app listener, but the target application must expose its callback server when the job fires.&lt;/p></description></item></channel></rss>