<prompt> Unda programu ya Node.js ambayo hutumika kama API RESTful ya kudhibiti mkusanyiko wa bidhaa. API inapaswa kusaidia kuunda, kusoma, kusasisha na kufuta bidhaa, pamoja na kuchuja bidhaa kulingana na vigezo fulani k.m., anuwai ya bei, aina. Tekeleza API kwa kutumia Express.js na uhifadhi data ya bidhaa katika hifadhidata ya PostgreSQL.PLINFORMAT  <response>: const express needexpress;const bodyParser needbody-parser;const Dimbwi needpg;const app express;const port process.env.PORT 3000; Sanidi muunganisho wa PostgreSQLconst pool Dimbwi jipya mtumiaji: mtumiaji_wako, mwenyeji: localhost, hifadhidata: database_yako, nenosiri: nenosiri_lako, bandari: 5432,;app.usebodyParser.json;app.use bodyParser.urlencoded kupanuliwa: kweli, ; Pata bidhaa zote au chujio kulingana na anuwai ya bei au kategoriaapp.getbidhaa, async req, res const minPrice, maxPrice, kategoria req.query; let query CHAGUA KUTOKA kwa bidhaa WAPI 11; ikiwa minPrice swala NA bei minPrice; ikiwa maxPrice swala NA bei maxPrice; ikiwa kitengo swali NA kategoria category; jaribu const result subiri pool.queryswali; hali.asili200.jsonsafu.matokeo; kukamata kukosea console.errorkosa; res.status500.jsonkosa:Hitilafu ya seva ya ndani ; ; Pata bidhaa moja kwa kitambulishoapp.getproducts:id, async req, res const id parseIntreq.params.id; jaribu const result await pool.queryCHAGUA KUTOKA kwa bidhaa WAPI id 1, id; res.status200.jsonmatokeo.safu0; kukamata kukosea console.errorkosa; res.status500.jsonkosa:Hitilafu ya seva ya ndani ; ; Unda bidhaa mpyaapp.postbidhaa, async req, res const jina, kitengo, bei req.body; jaribu const result wait pool.query WEKA NDANI ya bidhaa jina, kategoria, bei THAMANI 1, 2, 3 ZINAZOREJESHA , jina, kitengo, bei ; res.status201.jsonmatokeo.safu0; kukamata kukosea console.errorkosa; res.status500.jsonkosa:Hitilafu ya seva ya ndani ; ; Sasisha bidhaaapp.putproducts:id, async req, res const id parseIntreq.params.id; const jina, kitengo, bei req.body; jaribu const result wait pool.query SASISHA bidhaa SET jina 1, kategoria 2, bei 3 WAPI kitambulisho 4 INARUDISHA , jina, kitengo, bei, kitambulisho ; res.status200.jsonmatokeo.safu0; kukamata kukosea console.errorkosa; res.status500.jsonkosa:Hitilafu ya seva ya ndani ; ; Futa bidhaaapp.deleteproducts:id, async req, res const id parseIntreq.params.id; jaribu await pool.queryFUTA KUTOKA KWA bidhaa WAPI id 1, id; hali.asili204.tuma; kukamata kukosea console.errorkosa; res.status500.jsonkosa:Hitilafu ya seva ya ndani ; ;app.listenbandari, console.logProgramu inayoendesha kwenye bandari port.;; 