{"id":16540,"date":"2024-01-26T15:29:11","date_gmt":"2024-01-26T11:59:11","guid":{"rendered":"https:\/\/rasanegar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/"},"modified":"2024-01-26T15:29:11","modified_gmt":"2024-01-26T11:59:11","slug":"%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql","status":"publish","type":"post","link":"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/","title":{"rendered":"\u0622\u0645\u0648\u0632\u0634 SQLite \u0628\u0627 Node.js \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SQLite \u0631\u0627 \u062f\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 \u0645\u062d\u06cc\u0637 Node.js \u0628\u0627 \u06a9\u0645\u06a9 \u062f\u0631\u0627\u06cc\u0648\u0631 sqlite3 Node.js \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.  \u0628\u0631\u0627\u06cc \u06a9\u0633\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0627 SQLite \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0646\u062f\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u062a\u06a9 \u0641\u0627\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0647\u0648\u0634\u0645\u0646\u062f \u0628\u0633\u06cc\u0627\u0631 \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a."},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0633\u0631\u0641\u0635\u0644\u0647\u0627\u06cc \u0645\u0637\u0644\u0628<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%b1%d8%a7%d9%87_%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c_%d9%88_%d9%86%d8%b5%d8%a8\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0646\u0635\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%b7%d8%b1%d8%a7%d8%ad%db%8c_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\" >\u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%a7%db%8c%d8%ac%d8%a7%d8%af_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\" >\u0627\u06cc\u062c\u0627\u062f \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%af%d8%b1%d8%ac_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u062f\u0631\u062c \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%a8%d9%87_%d8%b1%d9%88%d8%b2_%d8%b1%d8%b3%d8%a7%d9%86%db%8c_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%ad%d8%b0%d9%81_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u062d\u0630\u0641 \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_%da%a9%d8%af_%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c_%d8%a8%d9%87_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%a8%d8%a7-node-js-%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%88%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-sql\/#%d9%86%d8%aa%db%8c%d8%ac%d9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span><p> <br \/>\n<\/p>\n<div class=\"content\"><noscript><\/p>\n<style>.lazyload-placeholder { display: none;  }<\/style>\n<p><\/noscript><\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SQLite \u0631\u0627 \u062f\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 \u0645\u062d\u06cc\u0637 Node.js \u0628\u0627 \u06a9\u0645\u06a9 \u062f\u0631\u0627\u06cc\u0648\u0631 sqlite3 Node.js \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.  \u0628\u0631\u0627\u06cc \u06a9\u0633\u0627\u0646\u06cc \u06a9\u0647 \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0646\u062f <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/SQLite\">SQLite<\/a>\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627\u0628\u0637\u0647 \u0627\u06cc \u062a\u06a9 \u0641\u0627\u06cc\u0644 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u060c \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0648 \u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 \u06a9\u0648\u0686\u06a9 \u0628\u0633\u06cc\u0627\u0631 \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a.<\/p>\n<h2 id=\"setupandinstallation\"><span class=\"ez-toc-section\" id=\"%d8%b1%d8%a7%d9%87_%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c_%d9%88_%d9%86%d8%b5%d8%a8\"><\/span>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0646\u0635\u0628<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u062c\u062f\u06cc\u062f npm \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0634\u0631\u0648\u0639 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f <code>npm init<\/code> \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062e\u0627\u0644\u06cc \u0628\u0647 \u0646\u0627\u0645 <code>node-sqlite-tutorial<\/code>.<\/p>\n<pre><code class=\"hljs\">$ npm init\nThis utility will walk you through creating a package.json file.\nIt only covers the most common items, and tries to guess sane defaults.\n\nSee `npm <span class=\"hljs-built_in\">help<\/span> json` <span class=\"hljs-keyword\">for<\/span> definitive documentation \u0631\u0648\u06cc these fields\nand exactly what they <span class=\"hljs-keyword\">do<\/span>.\n\nUse `npm install &lt;pkg&gt; --save` afterwards to install a package and\nsave it as a dependency <span class=\"hljs-keyword\">in<\/span> the package.json file.\n\nPress ^C at any time to quit.\nname: (app) node-sqlite\nversion: (0.0.0) 0.1.0\ndescription: Code <span class=\"hljs-keyword\">for<\/span> tutorial blog \u0631\u0648\u06cc node and sqlite\nentry point: (index.js) main.js\n<span class=\"hljs-built_in\">test<\/span> <span class=\"hljs-built_in\">command<\/span>: \ngit repository: \nkeywords: \nauthor: Adam McQuistan\nlicense: (BSD) MIT\nAbout to write to \/node-sqlite\/app\/package.json:\n\n{\n  <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"node-sqlite\"<\/span>,\n  <span class=\"hljs-string\">\"version\"<\/span>: <span class=\"hljs-string\">\"0.1.0\"<\/span>,\n  <span class=\"hljs-string\">\"description\"<\/span>: <span class=\"hljs-string\">\"Code for tutorial blog \u0631\u0648\u06cc node and sqlite\"<\/span>,\n  <span class=\"hljs-string\">\"main\"<\/span>: <span class=\"hljs-string\">\"main.js\"<\/span>,\n  <span class=\"hljs-string\">\"scripts\"<\/span>: {\n    <span class=\"hljs-string\">\"test\"<\/span>: <span class=\"hljs-string\">\"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"<\/span>\n  },\n  <span class=\"hljs-string\">\"repository\"<\/span>: <span class=\"hljs-string\">\"\"<\/span>,\n  <span class=\"hljs-string\">\"author\"<\/span>: <span class=\"hljs-string\">\"Adam McQuistan\"<\/span>,\n  <span class=\"hljs-string\">\"license\"<\/span>: <span class=\"hljs-string\">\"MIT\"<\/span>\n}\n\n\nIs this ok? (yes) \n<\/code><\/pre>\n<p>\u0628\u0639\u062f \u0628\u0627\u06cc\u062f \u0646\u0635\u0628 \u06a9\u0646\u0645 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.npmjs.com\/package\/sqlite3\">sqlite3<\/a> \u0628\u0633\u062a\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 npm \u0645\u0627\u0646\u0646\u062f:<\/p>\n<pre><code class=\"hljs\">$ npm install --save sqlite3\n<\/code><\/pre>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 sqlite3 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0646\u0635\u0628 \u06a9\u0646\u0645 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/bluebirdjs.com\/docs\/getting-started.html\" class=\"broken_link\">\u067e\u0631\u0646\u062f\u0647 \u0627\u0628\u06cc<\/a> \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u0634\u0646\u0627\u06cc \u0648\u0639\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.<\/p>\n<pre><code class=\"hljs\">$ npm install --save bluebird\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062e\u0627\u0644\u06cc \u062f\u0631\u0633\u062a \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u0645 <code>package.json<\/code> \u0641\u0627\u06cc\u0644 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u062f <code>database.sqlite3<\/code> \u06a9\u0647 SQLite \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0622\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2 id=\"designingthedatabase\"><span class=\"ez-toc-section\" id=\"%d8%b7%d8%b1%d8%a7%d8%ad%db%8c_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\"><\/span>\u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627\u0646\u0646\u062f \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0631 \u0645\u0642\u0627\u0644\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0645\u0646 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0645\u06a9 \u0628\u0647 \u062a\u0648\u0635\u06cc\u0641 \u0628\u0631\u062e\u06cc \u0627\u0632 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u0645\u0647\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 Node.js \u0648 SQLite \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0646 \u0628\u0627 \u0627\u06cc\u0646 \u0641\u0631\u0636 \u067e\u06cc\u0634 \u0645\u06cc \u0631\u0648\u0645 \u06a9\u0647 \u0644\u0627\u06cc\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u062f\u06cc\u0627\u0628\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u0645.  \u0642\u0648\u0627\u0646\u06cc\u0646 \u0627\u0633\u0627\u0633\u06cc \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<ul>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0633\u062a<\/li>\n<li>\u0647\u0631 \u067e\u0631\u0648\u0698\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f<\/li>\n<\/ul>\n<p>\u0628\u0627 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u062c\u0627\u0631\u06cc \u0628\u06cc\u0627\u0646 \u0634\u062f\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0627 \u0628\u06af\u06cc\u0631\u0645 \u0648 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0637\u0631\u0627\u062d\u06cc \u062c\u062f\u0627\u0648\u0644 \u0644\u0627\u0632\u0645 \u0648 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0622\u0646\u0647\u0627 \u06a9\u0646\u0645.  \u0648\u0627\u0636\u062d \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0627\u0644\u0641 \u0646\u06cc\u0627\u0632 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u0634\u062a <strong>\u067e\u0631\u0648\u0698\u0647 \u0647\u0627<\/strong> \u062c\u062f\u0648\u0644 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 <strong>\u0648\u0638\u0627\u06cc\u0641<\/strong> \u062c\u062f\u0648\u0644.  \u0628\u0631\u0627\u06cc \u0628\u0642\u06cc\u0647\u060c \u0641\u0642\u0637 \u0627\u0632 \u06a9\u0645\u06cc \u0634\u0647\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645\u060c \u0628\u0631\u062e\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u0645\u060c \u0648 \u0628\u0627 \u0622\u0646 \u0631\u0648\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0645 (\u0648\u06cc\u0698\u06af\u06cc \u06a9\u0627\u0631\u06cc \u0631\u0627\u06cc\u062c \u0628\u0631\u0627\u06cc \u0627\u06a9\u062b\u0631 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646).<\/p>\n<p><strong>\u062c\u062f\u0648\u0644 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627<\/strong><\/p>\n<table class=\"table table-striped\">\n<thead>\n<tr>\n<th>\u0634\u0646\u0627\u0633\u0647<\/th>\n<th>\u0646\u0627\u0645<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0631\u0627\u06cc\u062a Node.js &#8211; \u0622\u0645\u0648\u0632\u0634 SQLite<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u062c\u062f\u0648\u0644 \u0648\u0638\u0627\u06cc\u0641<\/strong><\/p>\n<table class=\"table table-striped\">\n<thead>\n<tr>\n<th>\u0634\u0646\u0627\u0633\u0647<\/th>\n<th>\u0646\u0627\u0645<\/th>\n<th>\u0634\u0631\u062d<\/th>\n<th>\u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a<\/th>\n<th>\u0634\u0646\u0627\u0633\u0647 \u067e\u0631\u0648\u0698\u0647<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0637\u0631\u062d \u06a9\u0644\u06cc<\/td>\n<td>\u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0633\u0637\u062d \u0628\u0627\u0644\u0627 \u0627\u0632 \u0628\u062e\u0634 \u0647\u0627<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0646\u0648\u0634\u062a\u0646<\/td>\n<td>\u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0642\u0627\u0644\u0647 \u0648 \u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f<\/td>\n<td>0<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062e\u0648\u0628\u060c \u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u06cc \u062f\u0627\u0646\u0645 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0631\u0627 \u0628\u0627\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0645\u060c \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06a9\u062f \u062a\u0631\u062c\u0645\u0647 \u06a9\u0646\u0645.<\/p>\n<h2 id=\"creatingthedatabase\"><span class=\"ez-toc-section\" id=\"%d8%a7%db%8c%d8%ac%d8%a7%d8%af_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\"><\/span>\u0627\u06cc\u062c\u0627\u062f \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0628\u0627\u06cc\u062f \u06cc\u06a9 <code>main.js<\/code> \u0641\u0627\u06cc\u0644 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0627\u0644\u0641 <code>dao.js<\/code> (\u06cc\u0627 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Data_access_object\">\u0634\u06cc\u0621 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647<\/a>) \u0641\u0627\u06cc\u0644 \u062f\u0631 \u0647\u0645\u0627\u0646 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0627 <code>package.json<\/code> \u0641\u0627\u06cc\u0644.<\/p>\n<p>\u062f\u0627\u062e\u0644 <code>dao.js<\/code>\u060c \u0628\u0631\u0627\u06cc sqlite3 \u0648 Bluebird&#8217;s import \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>Promise<\/code> \u0627\u0634\u06cc\u0627\u0621.  \u067e\u0633 \u0627\u0632 \u0622\u0646 \u0645\u0646 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0628\u0647 \u0646\u0627\u0645 \u062f\u0627\u0631\u0628\u0633\u062a \u062e\u0648\u0627\u0647\u0645 \u0633\u0627\u062e\u062a <code>AppDAO<\/code> \u06a9\u0647 \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0639\u0636\u0648 \u0628\u0647 \u0646\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0635 \u0645\u06cc \u062f\u0647\u062f <code>db<\/code>.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ dao.js<\/span>\n\n<span class=\"hljs-keyword\">const<\/span> sqlite3 = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sqlite3'<\/span>)\n<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-built_in\">Promise<\/span> = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'bluebird'<\/span>)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AppDAO<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-title\">constructor<\/span>(<span class=\"hljs-params\">dbFilePath<\/span>)<\/span> {\n    <span class=\"hljs-built_in\">this<\/span>.db = <span class=\"hljs-keyword\">new<\/span> sqlite3.Database(dbFilePath, <span class=\"hljs-function\">(<span class=\"hljs-params\">err<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-keyword\">if<\/span> (err) {\n        <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Could not connect to database'<\/span>, err)\n      } <span class=\"hljs-keyword\">else<\/span> {\n        <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Connected to database'<\/span>)\n      }\n    })\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = AppDAO\n<\/code><\/pre>\n<p>\u0627\u062a\u0635\u0627\u0644 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0633\u062a.  \u0634\u0645\u0627 \u0641\u0642\u0637 sqlite3 \u0631\u0627 \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f <code>Database<\/code> \u0633\u0627\u0632\u0646\u062f\u0647 \u06a9\u0644\u0627\u0633 \u0628\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u0633\u06cc\u0631 \u0628\u0647 \u0641\u0627\u06cc\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 SQLite \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0627 \u0622\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u062e\u0637\u0627\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0631\u062e \u062f\u0647\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0630\u06a9\u0631 \u0634\u062f\u060c \u0645\u0646 \u0627\u06cc\u0646 \u0634\u06cc \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u062f\u0631 \u0641\u06cc\u0644\u062f\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>db<\/code> \u0631\u0648\u06cc  \u0631\u0627 <code>AppDAO<\/code> \u06a9\u0644\u0627\u0633<\/p>\n<p>\u0645\u0646 \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0634\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u067e\u06cc\u0634\u0631\u0641\u062a \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f.  \u0628\u0633\u062a\u0647 sqlite3 Node.js \u062a\u0639\u062f\u0627\u062f\u06cc \u0631\u0648\u0634 \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u0648\u0626\u0631\u06cc \u0647\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f\u060c \u0627\u0645\u0627 \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646 \u0631\u0648\u06cc \u0622\u0646\u0647\u0627 \u062a\u0645\u0631\u06a9\u0632 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f. \u0631\u0648\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<ul>\n<li><code>run<\/code>: \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062c\u062f\u0627\u0648\u0644 \u0648 \u062f\u0631\u062c \u06cc\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f<\/li>\n<li><code>get<\/code>: \u06cc\u06a9 \u0631\u062f\u06cc\u0641 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u062c\u062f\u0648\u0644 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<li><code>all<\/code>: \u0686\u0646\u062f\u06cc\u0646 \u0631\u062f\u06cc\u0641 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u062c\u062f\u0648\u0644 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u0647 \u06a9\u0634\u0641 <code>run<\/code> \u0631\u0648\u0634.  \u0646\u062d\u0648 \u06a9\u0644\u06cc \u0622\u0646 \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"hljs\">db.run(<span class=\"hljs-string\">'SOME SQL QUERY'<\/span>, (param1, param2), <span class=\"hljs-function\">(<span class=\"hljs-params\">err<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">if<\/span> (err) {\n    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'ERROR!'<\/span>, err)\n  }\n})\n<\/code><\/pre>\n<p>\u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u0648\u0644 \u0628\u0647 <code>run(...)<\/code> \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0627\u0632 SQL \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u062c\u0631\u0627 \u0634\u0648\u062f \u0648 \u062a\u0646\u0647\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a.  \u062f\u0648\u0645\u06cc\u0646 \u0622\u0631\u0627\u06cc\u0647 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0627\u0632 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627 \u0627\u0633\u062a \u06a9\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 sqlite3 \u0622\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u062f swap \u0628\u0631\u0627\u06cc \u0647\u0631 &#8220;\u061f&#8221;  \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc\u06cc \u062f\u0631 \u067e\u0631\u0633 \u0648 \u062c\u0648 (\u0627\u06cc\u0646 \u0631\u0627 \u062f\u0631 \u0627\u0646\u062f\u06a9\u06cc \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f).  \u0622\u062e\u0631\u06cc\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u062a\u0645\u0627\u0633 \u062e\u0637\u0627 \u0627\u0633\u062a.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u0634\u06a9\u0648\u06a9 \u0628\u0627\u0634\u06cc\u062f \u0645\u0646 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f <code>run(...)<\/code> \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0648 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627 \u0648 \u0648\u0638\u0627\u06cc\u0641 \u0645\u0646.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0645\u0646 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0642\u0635\u062f \u062f\u0627\u0631\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0646\u0633\u062e\u0647 \u062e\u0648\u062f\u0645 \u0627\u0632 a \u0628\u067e\u06cc\u0686\u0645 <code>run<\/code> \u0631\u0648\u0634 \u0631\u0648\u06cc \u0631\u0627 <code>AppDAO<\/code> \u06a9\u0644\u0627\u0633 \u0686\u0648\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u06a9\u067e\u0633\u0648\u0644\u0647 \u06a9\u0646\u0645 <code>bluebird<\/code> <code>Promise<\/code>  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0686\u06cc\u0632\u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0635\u0631\u06cc\u062d \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0642\u0648\u0644 \u0628\u0627\u0634\u0646\u062f \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ dao.js<\/span>\n\n<span class=\"hljs-keyword\">const<\/span> sqlite3 = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sqlite3'<\/span>)\n<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-built_in\">Promise<\/span> = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'bluebird'<\/span>)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AppDAO<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting constructor code<\/span>\n  \n  <span class=\"hljs-function\"><span class=\"hljs-title\">run<\/span>(<span class=\"hljs-params\">sql, params = ()<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve, reject<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">this<\/span>.db.run(sql, params, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\">err<\/span>) <\/span>{\n        <span class=\"hljs-keyword\">if<\/span> (err) {\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Error running sql '<\/span> + sql)\n          <span class=\"hljs-built_in\">console<\/span>.log(err)\n          reject(err)\n        } <span class=\"hljs-keyword\">else<\/span> {\n          resolve({ <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-built_in\">this<\/span>.lastID })\n        }\n      })\n    })\n  }\n}\n<\/code><\/pre>\n<p>\u0628\u0627 \u0633\u0641\u0627\u0631\u0634 \u0645\u0646 <code>AppDAO.run(...)<\/code> \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0648\u0638\u0627\u06cc\u0641 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0645\u0646 \u062f\u0648 \u0641\u0627\u06cc\u0644 \u062f\u06cc\u06af\u0631 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0628\u0647 \u0646\u0627\u0645 \u0647\u0627\u06cc project_repository.js \u0648 task_repository.js \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645.  \u062f\u0631 \u062f\u0627\u062e\u0644 project_repository.js \u06a9\u0644\u0627\u0633\u06cc \u0628\u0647 \u0646\u0627\u0645 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u0645 <code>ProjectRepository<\/code> \u06a9\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u06cc \u062f\u0627\u0631\u062f \u06a9\u0647 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f <code>AppDAO<\/code> \u0634\u06cc\u0621 \u0648 \u0627\u0644\u0641 <code>createTable<\/code> \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0628\u0631\u062e\u06cc \u0627\u0632 DDL (\u0632\u0628\u0627\u0646 \u062a\u0639\u0631\u06cc\u0641 \u062f\u0627\u062f\u0647) SQL \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0645\u0627\u0646\u0646\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-title\">constructor<\/span>(<span class=\"hljs-params\">dao<\/span>)<\/span> {\n    <span class=\"hljs-built_in\">this<\/span>.dao = dao\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">createTable<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> sql = <span class=\"hljs-string\">`\n    CREATE TABLE IF NOT EXISTS projects (\n      id INTEGER PRIMARY KEY AUTOINCREMENT,\n      name TEXT)`<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(sql)\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u0633\u067e\u0633 \u0645\u0646 \u0627\u0633\u0627\u0633\u0627\u064b \u0647\u0645\u0627\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u0645\u060c \u0627\u0645\u0627\u060c \u0627\u06cc\u0646 \u0628\u0627\u0631 \u062f\u0631 \u0641\u0627\u06cc\u0644 task_repository.js.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ task_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TaskRepository<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-title\">constructor<\/span>(<span class=\"hljs-params\">dao<\/span>)<\/span> {\n    <span class=\"hljs-built_in\">this<\/span>.dao = dao\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">createTable<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> sql = <span class=\"hljs-string\">`\n      CREATE TABLE IF NOT EXISTS tasks (\n        id INTEGER PRIMARY KEY AUTOINCREMENT,\n        name TEXT,\n        description TEXT,\n        isComplete INTEGER DEFAULT 0,\n        projectId INTEGER,\n        CONSTRAINT tasks_fk_projectId FOREIGN KEY (projectId)\n          REFERENCES projects(id) \u0631\u0648\u06cc UPDATE CASCADE \u0631\u0648\u06cc DELETE CASCADE)`<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(sql)\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = TaskRepository;\n<\/code><\/pre>\n<p>DDL SQL \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u06a9\u0627\u0645\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u062d\u0631\u06a9\u062a \u0645\u06cc \u06a9\u0646\u0645 \u0631\u0648\u06cc \u0628\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u062c \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 \u062c\u062f\u0627\u0648\u0644.<\/p>\n<h2 id=\"insertingdata\"><span class=\"ez-toc-section\" id=\"%d8%af%d8%b1%d8%ac_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u062f\u0631\u062c \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 <code>ProjectRepository<\/code> \u06a9\u0644\u0627\u0633 \u0628\u0627\u06cc\u062f a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645 <code>create<\/code> \u0645\u062a\u062f\u06cc \u06a9\u0647 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 INSERT \u0645\u0646\u0627\u0633\u0628 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>AppDAO.run(...)<\/code> \u0631\u0648\u0634.  \u062a\u0648\u062c\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 &#8220;\u061f&#8221; \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645  \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0645\u0642\u062f\u0627\u0631 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647 \u0648 \u0633\u067e\u0633 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 <code>name<\/code> \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u062f\u0631 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0622\u0631\u0627\u06cc\u0647 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0628\u0647 <code>run(...)<\/code> \u0631\u0648\u0634.  \u0627\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u067e\u0631\u0633 \u0648 \u062c\u0648 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u06cc \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u062e\u0637\u0631\u0627\u062a \u062a\u0632\u0631\u06cc\u0642 SQL \u067e\u0627\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">create<\/span>(<span class=\"hljs-params\">name<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">'INSERT INTO projects (name) VALUES (?)'<\/span>,\n      (name))\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u06cc\u06a9 \u0631\u0648\u0634 \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u0627\u0628\u0647 \u0628\u0631\u0627\u06cc <code>TaskRepository<\/code> \u06a9\u0644\u0627\u0633<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ task_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TaskRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">create<\/span>(<span class=\"hljs-params\">name, description, isComplete, projectId<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">`INSERT INTO tasks (name, description, isComplete, projectId)\n        VALUES (?, ?, ?, ?)`<\/span>,\n      (name, description, isComplete, projectId))\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = TaskRepository;\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062f\u0631\u062c \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062f\u0627\u0631\u0645\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645.<\/p>\n<h2 id=\"updatingdata\"><span class=\"ez-toc-section\" id=\"%d8%a8%d9%87_%d8%b1%d9%88%d8%b2_%d8%b1%d8%b3%d8%a7%d9%86%db%8c_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 <code>ProjectRepository<\/code> \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f <code>update<\/code> \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0627\u0644\u0641 <code>project<\/code> \u0634\u06cc \u0648 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0631\u06a9\u0648\u0631\u062f \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0622\u0646 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u06a9\u0646\u062f <code>AppDAO.run(...)<\/code> \u0631\u0648\u0634\u060c \u0645\u0627\u0646\u0646\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">update<\/span>(<span class=\"hljs-params\">project<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> { id, name } = project\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">`UPDATE projects SET name = ? WHERE id = ?`<\/span>,\n      (name, id)\n    )\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0631\u0648\u0634 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0633\u062a <code>TaskRepository<\/code> \u06a9\u0644\u0627\u0633<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ task_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TaskRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">update<\/span>(<span class=\"hljs-params\">task<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> { id, name, description, isComplete, projectId } = task\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">`UPDATE tasks\n      SET name = ?,\n        description = ?,\n        isComplete = ?,\n        projectId = ?\n      WHERE id = ?`<\/span>,\n      (name, description, isComplete, projectId, id)\n    )\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = TaskRepository;\n<\/code><\/pre>\n<h2 id=\"deletingdata\"><span class=\"ez-toc-section\" id=\"%d8%ad%d8%b0%d9%81_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u062d\u0630\u0641 \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0622\u062e\u0631\u06cc\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f \u062c\u0647\u0634\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc\u060c \u0627\u0631\u0627\u0626\u0647 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062d\u0630\u0641 \u0631\u06a9\u0648\u0631\u062f\u0647\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0646 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f <code>AppDAO.run(...)<\/code> \u0631\u0648\u0634 \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u062c\u062f\u06cc\u062f <code>delete<\/code> \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648 <code>ProjectRepository<\/code> \u0648 <code>TaskRepository<\/code> \u06a9\u0644\u0627\u0633 \u0647\u0627.<\/p>\n<p>\u0628\u0631\u0627\u06cc <code>ProjectRepository<\/code> \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">delete<\/span>(<span class=\"hljs-params\">id<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">`DELETE FROM projects WHERE id = ?`<\/span>,\n      (id)\n    )\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u0648 \u0628\u0631\u0627\u06cc <code>TaskRepository<\/code> \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ task_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TaskRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">delete<\/span>(<span class=\"hljs-params\">id<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.run(\n      <span class=\"hljs-string\">`DELETE FROM tasks WHERE id = ?`<\/span>,\n      (id)\n    )\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = TaskRepository;\n<\/code><\/pre>\n<p>\u0628\u0633\u06cc\u0627\u0631 \u062e\u0648\u0628\u060c \u0627\u06cc\u0646 \u0647\u0645\u0647 \u0631\u0627\u0647 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0646 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f \u0631\u0627 \u06a9\u0627\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f <code>run<\/code> \u0631\u0648\u0634.  \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u0647 \u0645\u0639\u0631\u0641\u06cc \u062f\u0648 \u0645\u0631\u062a\u0628\u0637 \u062f\u06cc\u06af\u0631 \u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u0645 <code>get<\/code> \u0648 <code>all<\/code> \u0631\u0648\u0634 \u0647\u0627\u06cc \u0628\u0633\u062a\u0647 sqlite3 Node.js.<\/p>\n<h2 id=\"readingdata\"><span class=\"ez-toc-section\" id=\"%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0642\u0635\u062f \u062f\u0627\u0631\u0645 \u0628\u0647 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0628\u067e\u0631\u062f\u0627\u0632\u0645 <code>get<\/code> \u0648 <code>all<\/code> \u0631\u0648\u0634 \u0647\u0627\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 sqlite3 Node.js.  \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0630\u06a9\u0631 \u0634\u062f\u060c <code>get<\/code> \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06cc\u06a9 \u0631\u062f\u06cc\u0641 \u062f\u0627\u062f\u0647 \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>all<\/code> \u0628\u0631\u0627\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648\u06cc \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0631\u062f\u06cc\u0641 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0646\u062d\u0648 \u067e\u0627\u06cc\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 <code>get<\/code> \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"hljs\">db.get(<span class=\"hljs-string\">'SELECT ...'<\/span>, (param1, param2), <span class=\"hljs-function\">(<span class=\"hljs-params\">err, result<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">if<\/span> (err) {\n    <span class=\"hljs-built_in\">console<\/span>.log(err)\n  } <span class=\"hljs-keyword\">else<\/span> {\n    <span class=\"hljs-comment\">\/\/ do something with result<\/span>\n  }\n})\n<\/code><\/pre>\n<p>\u062c\u0627\u06cc\u06cc \u06a9\u0647 <code>db<\/code> \u06cc\u06a9 \u0634\u06cc \u0627\u062a\u0635\u0627\u0644 sqlite3 \u0627\u0633\u062a.  \u0645\u062a\u0648\u062c\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f \u06a9\u0647 \u0646\u062d\u0648 \u0627\u0633\u0627\u0633\u0627\u064b \u0645\u0634\u0627\u0628\u0647 \u0627\u0633\u062a <code>run<\/code> \u0631\u0648\u0634 \u0628\u0627 \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u06a9\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u0636\u0627\u0641\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u06cc\u0686 \u062e\u0637\u0627\u06cc\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u060c \u0634\u06cc \u0646\u062a\u06cc\u062c\u0647 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f.<\/p>\n<p>\u0646\u062d\u0648 \u067e\u0627\u06cc\u0647 \u0628\u0631\u0627\u06cc <code>all<\/code> \u0627\u0633\u0627\u0633\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u0627\u0633\u062a\u060c \u0628\u0647 \u062c\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u062f\u0648\u0645 \u0628\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646 \u0622\u0631\u0627\u06cc\u0647 \u0627\u06cc \u0627\u0632 \u0646\u062a\u0627\u06cc\u062c \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0633\u062a\u060c \u0645\u0627\u0646\u0646\u062f:<\/p>\n<pre><code class=\"hljs\">db.all(<span class=\"hljs-string\">'SELECT ...'<\/span>, (param1, param2), <span class=\"hljs-function\">(<span class=\"hljs-params\">err, results<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">if<\/span> (err) {\n    <span class=\"hljs-built_in\">console<\/span>.log(err)\n  } <span class=\"hljs-keyword\">else<\/span> {\n    <span class=\"hljs-comment\">\/\/ do something with results<\/span>\n  }\n})\n<\/code><\/pre>\n<p>\u062f\u0631\u0633\u062a \u0645\u062b\u0644 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627 sqlite3 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0645 <code>run<\/code> \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0645\u0646 \u0642\u0635\u062f \u062f\u0627\u0631\u0645 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u0645 <code>get<\/code> \u0648 <code>all<\/code> \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>bluebird<\/code> <code>Promise<\/code>  \u062f\u0631 \u062f\u0627\u062e\u0644 <code>AppDAO<\/code> \u06a9\u0644\u0627\u0633 \u0645\u0637\u0627\u0628\u0642 \u0634\u06a9\u0644 \u0632\u06cc\u0631:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ dao.js<\/span>\n\n<span class=\"hljs-keyword\">const<\/span> sqlite3 = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sqlite3'<\/span>).verbose()\n<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-built_in\">Promise<\/span> = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'bluebird'<\/span>)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AppDAO<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n  \n  <span class=\"hljs-function\"><span class=\"hljs-title\">get<\/span>(<span class=\"hljs-params\">sql, params = ()<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve, reject<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">this<\/span>.db.get(sql, params, <span class=\"hljs-function\">(<span class=\"hljs-params\">err, result<\/span>) =&gt;<\/span> {\n        <span class=\"hljs-keyword\">if<\/span> (err) {\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Error running sql: '<\/span> + sql)\n          <span class=\"hljs-built_in\">console<\/span>.log(err)\n          reject(err)\n        } <span class=\"hljs-keyword\">else<\/span> {\n          resolve(result)\n        }\n      })\n    })\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">all<\/span>(<span class=\"hljs-params\">sql, params = ()<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve, reject<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">this<\/span>.db.all(sql, params, <span class=\"hljs-function\">(<span class=\"hljs-params\">err, rows<\/span>) =&gt;<\/span> {\n        <span class=\"hljs-keyword\">if<\/span> (err) {\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Error running sql: '<\/span> + sql)\n          <span class=\"hljs-built_in\">console<\/span>.log(err)\n          reject(err)\n        } <span class=\"hljs-keyword\">else<\/span> {\n          resolve(rows)\n        }\n      })\n    })\n  }\n}\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u062f\u0631 \u0633\u0627\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 <code>ProjectRepository<\/code> \u0648 <code>TaskRepository<\/code> \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 SQLite.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>getById<\/code> \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0647\u0631 \u06a9\u0644\u0627\u0633 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 id.<\/p>\n<p>\u06a9\u0647 \u062f\u0631 <code>ProjectRepository<\/code> \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">getById<\/span>(<span class=\"hljs-params\">id<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.get(\n      <span class=\"hljs-string\">`SELECT * FROM projects WHERE id = ?`<\/span>,\n      (id))\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u0648 \u062f\u0631 <code>TaskRepository<\/code> \u0628\u0647 \u0637\u0648\u0631 \u0645\u0634\u0627\u0628\u0647:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ task_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TaskRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">getById<\/span>(<span class=\"hljs-params\">id<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.get(\n      <span class=\"hljs-string\">`SELECT * FROM tasks WHERE id = ?`<\/span>,\n      (id))\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = TaskRepository;\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 <code>AppDAO.all(...)<\/code> \u0631\u0648\u0634 \u0645\u0646 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062a\u0645\u0627\u0645 \u0648\u0638\u0627\u06cc\u0641 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0645\u0639\u06cc\u0646 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<p>\u06a9\u062f SELECT \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627 \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">getAll<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.all(<span class=\"hljs-string\">`SELECT * FROM projects`<\/span>)\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<p>\u0633\u067e\u0633 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u062a\u0645\u0627\u0645 \u0648\u0638\u0627\u06cc\u0641 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0627\u0632 \u0631\u0648\u0634\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>getTasks(projectId)<\/code> \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u062f \u0634\u0646\u0627\u0633\u0647 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc \u06a9\u0647 \u0648\u0638\u0627\u06cc\u0641 \u0622\u0646 \u0631\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ project_repository.js<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProjectRepository<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ omitting other methods<\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-title\">getTasks<\/span>(<span class=\"hljs-params\">projectId<\/span>)<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">this<\/span>.dao.all(\n      <span class=\"hljs-string\">`SELECT * FROM tasks WHERE projectId = ?`<\/span>,\n      (projectId))\n  }\n}\n\n<span class=\"hljs-built_in\">module<\/span>.exports = ProjectRepository;\n<\/code><\/pre>\n<h2 id=\"puttingthedataaccesscodetouse\"><span class=\"ez-toc-section\" id=\"%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_%da%a9%d8%af_%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c_%d8%a8%d9%87_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0627 \u06a9\u0646\u0648\u0646 \u0645\u0646 \u0627\u0633\u0627\u0633\u0627\u064b \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0633\u0627\u062e\u062a\u06af\u06cc \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0645.  \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u06a9\u0647 \u062f\u0631 \u062c\u062f\u0627\u0648\u0644 \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u062c\u062f\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 <strong>\u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong> \u0628\u062e\u0634.<\/p>\n<p>\u062f\u0631 <code>main.js<\/code> \u0641\u0627\u06cc\u0644\u060c \u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u0647 \u062c\u0644\u0648 \u0648 \u062f\u0631 <code>AppDAO<\/code>\u060c <code>ProjectRepository<\/code>\u060c \u0648 <code>TaskRepository<\/code> \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>require<\/code>.  \u0633\u067e\u0633 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u0627\u0648\u0644\u060c \u067e\u0631 \u06a9\u0631\u062f\u0646 \u0622\u0646\u0647\u0627 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u0622\u0646\u0647\u0627 \u062f\u0631 console.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ main.js<\/span>\n\n<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-built_in\">Promise<\/span> = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'bluebird'<\/span>)\n<span class=\"hljs-keyword\">const<\/span> AppDAO = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'.\/dao'<\/span>)\n<span class=\"hljs-keyword\">const<\/span> ProjectRepository = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'.\/project_repository'<\/span>)\n<span class=\"hljs-keyword\">const<\/span> TaskRepository = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'.\/task_repository'<\/span>)\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">main<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-keyword\">const<\/span> dao = <span class=\"hljs-keyword\">new<\/span> AppDAO(<span class=\"hljs-string\">'.\/database.sqlite3'<\/span>)\n  <span class=\"hljs-keyword\">const<\/span> blogProjectData = { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'Write Node.js - SQLite Tutorial'<\/span> }\n  <span class=\"hljs-keyword\">const<\/span> projectRepo = <span class=\"hljs-keyword\">new<\/span> ProjectRepository(dao)\n  <span class=\"hljs-keyword\">const<\/span> taskRepo = <span class=\"hljs-keyword\">new<\/span> TaskRepository(dao)\n  <span class=\"hljs-keyword\">let<\/span> projectId\n\n  projectRepo.createTable()\n    .then(<span class=\"hljs-function\">() =&gt;<\/span> taskRepo.createTable())\n    .then(<span class=\"hljs-function\">() =&gt;<\/span> projectRepo.create(blogProjectData.name))\n    .then(<span class=\"hljs-function\">(<span class=\"hljs-params\">data<\/span>) =&gt;<\/span> {\n      projectId = data.id\n      <span class=\"hljs-keyword\">const<\/span> tasks = (\n        {\n          <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'Outline'<\/span>,\n          <span class=\"hljs-attr\">description<\/span>: <span class=\"hljs-string\">'High level overview of sections'<\/span>,\n          <span class=\"hljs-attr\">isComplete<\/span>: <span class=\"hljs-number\">1<\/span>,\n          projectId\n        },\n        {\n          <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'Write'<\/span>,\n          <span class=\"hljs-attr\">description<\/span>: <span class=\"hljs-string\">'Write article contents and code examples'<\/span>,\n          <span class=\"hljs-attr\">isComplete<\/span>: <span class=\"hljs-number\">0<\/span>,\n          projectId\n        }\n      )\n      <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">Promise<\/span>.all(tasks.map(<span class=\"hljs-function\">(<span class=\"hljs-params\">task<\/span>) =&gt;<\/span> {\n        <span class=\"hljs-keyword\">const<\/span> { name, description, isComplete, projectId } = task\n        <span class=\"hljs-keyword\">return<\/span> taskRepo.create(name, description, isComplete, projectId)\n      }))\n    })\n    .then(<span class=\"hljs-function\">() =&gt;<\/span> projectRepo.getById(projectId))\n    .then(<span class=\"hljs-function\">(<span class=\"hljs-params\">project<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`\\nRetreived project from database`<\/span>)\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`project id = <span class=\"hljs-subst\">${project.id}<\/span>`<\/span>)\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`project name = <span class=\"hljs-subst\">${project.name}<\/span>`<\/span>)\n      <span class=\"hljs-keyword\">return<\/span> taskRepo.getTasks(project.id)\n    })\n    .then(<span class=\"hljs-function\">(<span class=\"hljs-params\">tasks<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'\\nRetrieved project tasks from database'<\/span>)\n      <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\">(<span class=\"hljs-params\">resolve, reject<\/span>) =&gt;<\/span> {\n        tasks.forEach(<span class=\"hljs-function\">(<span class=\"hljs-params\">task<\/span>) =&gt;<\/span> {\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`task id = <span class=\"hljs-subst\">${task.id}<\/span>`<\/span>)\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`task name = <span class=\"hljs-subst\">${task.name}<\/span>`<\/span>)\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`task description = <span class=\"hljs-subst\">${task.description}<\/span>`<\/span>)\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`task isComplete = <span class=\"hljs-subst\">${task.isComplete}<\/span>`<\/span>)\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`task projectId = <span class=\"hljs-subst\">${task.projectId}<\/span>`<\/span>)\n        })\n      })\n      resolve(<span class=\"hljs-string\">'success'<\/span>)\n    })\n    .catch(<span class=\"hljs-function\">(<span class=\"hljs-params\">err<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Error: '<\/span>)\n      <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-built_in\">JSON<\/span>.stringify(err))\n    })\n}\n\nmain()\n<\/code><\/pre>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>node<\/code> \u0645\u062b\u0644 \u0627\u06cc\u0646:<\/p>\n<pre><code class=\"hljs\">$ node main.js\n<\/code><\/pre>\n<p>\u0648 \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f.<\/p>\n<pre><code class=\"hljs\">Connected to database\nRetrieved project from database\nproject id = 1\nproject name = 1\nRetrieved project tasks from database\ntask id = 1\ntask name = Outline\ntask description = High level overview of sections\ntask isComplete = 1\ntask projectId = 1\ntask id = 2\ntask name = Write\ntask description = Write article contents and code examples\ntask isComplete = 0\ntask projectId = 1\n<\/code><\/pre>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\"><\/span>\u0646\u062a\u06cc\u062c\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0627\u0635\u0648\u0644 \u0627\u0648\u0644\u06cc\u0647 API \u0628\u0633\u062a\u0647 Node.js sqlite3 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f\u0647\u200c\u0627\u0645 \u0648 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647\u200c\u0627\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0634\u06cc \u06af\u0631\u0627 \u0628\u0627 \u062a\u0645\u0631\u06a9\u0632 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f. \u0631\u0648\u06cc \u0627\u062c\u0631\u0627\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0648\u0639\u062f\u0647<\/p>\n<p>\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0648 \u0627\u0633\u062a\u0642\u0628\u0627\u0644 \u0627\u0632 \u0646\u0638\u0631\u0627\u062a \u0648 \u0627\u0646\u062a\u0642\u0627\u062f\u0627\u062a \u0632\u06cc\u0631 \u062a\u0634\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<\/div>\n<p>    (\u0628\u0631\u0686\u0633\u0628\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u062a\u0631\u062c\u0645\u0647)# \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<br \/>\n<br \/><br \/>\n<br \/>\u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u062f\u0631 1403-01-26 15:29:04<br \/>\n<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;center&quot;,&quot;id&quot;:&quot;16540&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628&quot;,&quot;legend&quot;:&quot;0\\\/5 (0 \u0631\u0627\u06cc)&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u0622\u0645\u0648\u0632\u0634 SQLite \u0628\u0627 Node.js \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SQLite \u0631\u0627 \u062f\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 \u0645\u062d\u06cc\u0637 Node.js \u0628\u0627 \u06a9\u0645\u06a9 \u062f\u0631\u0627\u06cc\u0648\u0631 sqlite3 Node.js \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.  \u0628\u0631\u0627\u06cc \u06a9\u0633\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0627 SQLite \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0646\u062f\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u062a\u06a9 \u0641\u0627\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0647\u0648\u0634\u0645\u0646\u062f \u0628\u0633\u06cc\u0627\u0631 \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a.&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ({count} \u0631\u0627\u06cc)&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            <span class=\"kksr-muted\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span>\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SQLite \u0631\u0627 \u062f\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 \u0645\u062d\u06cc\u0637 Node.js \u0628\u0627 \u06a9\u0645\u06a9 \u062f\u0631\u0627\u06cc\u0648\u0631 sqlite3 Node.js \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f. \u0628\u0631\u0627\u06cc \u06a9\u0633\u0627\u0646\u06cc \u06a9\u0647 \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0646\u062f SQLite\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627\u0628\u0637\u0647 \u0627\u06cc \u062a\u06a9 \u0641\u0627\u06cc\u0644 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u060c \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0648 \u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":16541,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1772,620],"tags":[],"class_list":["post-16540","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","category-programming"],"acf":[],"_links":{"self":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/16540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/comments?post=16540"}],"version-history":[{"count":0,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/16540\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media\/16541"}],"wp:attachment":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media?parent=16540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/categories?post=16540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/tags?post=16540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}