<prompt> Unda seva ya wavuti ya Node.js inayotoa faili tuli kutoka kwa saraka maalum na kutoa vidokezo RESTful vya API kwa shughuli za CRUD kwenye muundo wa Task pamoja na sehemu kama vile kichwa, maelezo, tarehe ya kukamilisha iliyohifadhiwa katika hifadhidata ya PostgreSQL.  <response>: Ili kuunda seva ya wavuti ya Node.js inayotumikia faili tuli na kutoa miisho ya API RESTful kwa shughuli za CRUD kwenye muundo wa Task, utahitaji kufuata hatua hizi:1. Sakinisha vitegemezi vinavyohitajika2. Sanidi hifadhidata ya PostgreSQL3. Unda programu ya Express na usanidi programu ya kati4. Kutumikia faili za tuli5. Fafanua mfano wa Kazi6. Unda njia za API kwa shughuli za CRUD7. Anzisha sevaHapa kuna mfano wa utekelezaji: javascript 1. Sakinisha tegemezi zinazohitajikaconst express needexpress;const path neednjia;const bodyParser needbody-parser;const Dimbwi needpg; 2. Sanidi hifadhidata ya PostgreSQLconst pool Dimbwi jipya mtumiaji: mtumiaji_wako, mwenyeji: localhost, hifadhidata: database_yako, nenosiri: nenosiri_lako, bandari: 5432,; 3. Unda programu ya Express na usanidi vifaa vya katiconst app express;app.usebodyParser.json;app.usebodyParser.urlencoded extended: false ; 4. Kutumikia faili za tuliapp.useexpress.staticpath.join__dirname,public; 5. Fafanua mfano wa KaziKazi ya darasa mjenzikitambulisho, kichwa, maelezo, tarehe_ya_kukamilika this.id id; hiki.kichwa kichwa; hii.maelezo maelezo; this.due_date tarehe_ya_kutarajiwa; async tuli getAll const res await pool.queryCHAGUA KUTOKA kwa kazi UTANGULIZI KWA kitambulisho ASC; rejesha res.rows.mapsafu Kazi mpyasafu.kitambulisho, kichwa cha safu mlalo, maelezo ya safu mlalo, tarehe_mlalo.due_date; async tuli getByIdid const res await pool.queryCHAGUA KUTOKA kazini WAPI id 1, id; ikiwa res.rowCount 0 kurudi null; const row res.rows0; rudisha Kazi mpyasafu.id, safu.kichwa, maelezo ya safu mlalo, tarehe.due_date; async save ikiwa hii.id await pool.queryUSASISHA kazi SET kichwa 1, maelezo 2, tarehe ya kukamilisha 3 WHERE id 4, kichwa.hiki, maelezo.haya, hii.tarehe_ya_maisha, hii.id, ; nyengine const res await pool.queryINGIZA KATIKA kazi cheo, maelezo, tarehe_ya_kutarajiwa THAMANI 1, 2, 3 KITAMBULISHO CHA KURUDISHA, kichwa.hiki, maelezo.haya, hii.tarehe_ya_maisha, ; this.id res.rows0.id; async delete await pool.queryFUTA KUTOKA KWA kazi WAPI id 1, this.id; 6. Unda njia za API kwa shughuli za CRUDapp.getapitasks, async req, res const tasks await Task.getAll; res.jsonkazi;;app.postapitasks, async req, res const task Kazi mpyanull, req.body.title, req.body.description, req.body.due_date; subiri task.save; hali.status201.jsonkazi;;app.putapitasks:id, async req, res const task await Task.getByIdreq.params.id; ikiwa !task itarudisha res.sendStatus404; task.title req.body.title; kazi.maelezo req.body.description; task.due_date req.body.due_date; subiri task.save; res.jsonkazi;;app.deleteapitasks:id, async req, res const task await Task.getByIdreq.params.id; ikiwa !task itarudisha res.sendStatus404; subiri task.delete; res.sendStatus204;; 7. Anzisha sevaconst port process.env.PORT 3000;app.listenbandari, console.logSeva inafanya kazi kwenye bandari port;;Kabla ya kutekeleza msimbo huu, hakikisha kuwa umeunda saraka ya umma katika folda ya mradi wako kwa ajili ya kutoa faili tuli.Pia, usisahau kusanikisha utegemezi unaohitajika kwa kukimbia:bashinpm init -ynpm install express body-parser pgNa ubadilishe vigezo vya muunganisho wa PostgreSQL na kitambulisho chako mwenyewe.Mwishowe, utahitaji kuunda jedwali linaloitwa kazi kwenye hifadhidata yako ya PostgreSQL na schema ifuatayo: sqlTUNZA kazi za TABLE id UFUNGUO WA MSINGI WA SERIAL, kichwa VARCHAR255 SI UFUPI, maelezo TEXT, tarehe_ya_kukamilika DATE;Sasa unaweza kuendesha seva yako ya wavuti ya Node.js kwa kutumia node app.js, na itatumikia faili tuli kutoka kwenye saraka ya umma na kutoa miisho ya API RESTful kwa shughuli za CRUD kwenye muundo wa Task uliohifadhiwa katika hifadhidata ya PostgreSQL. 