<prompt> Tengeneza programu ya Node.js inayounganisha kwenye hifadhidata ya MariaDB na kufanya shughuli za CRUD Unda, Soma, Sasisha, Futa kwenye jedwali la bidhaa. Tumia vigezo vya mazingira ili kuhifadhi vitambulisho vya hifadhidata.PLINFORMAT  <response>: const express needexpress;const mariadb hitajimariadb;const dotenv needdotenv; Pakia vigezo vya mazingira kutoka kwa faili ya .envdotenv.config; Anzisha programu ya Expressconst app express;app.useexpress.json; Unda dimbwi la unganisho la MariaDBconst pool mariadb.createPool mwenyeji: process.env.DB_HOST, mtumiaji: process.env.DB_USER, nenosiri: process.env.DB_PASSWORD, hifadhidata: process.env.DB_NAME,; Pata bidhaa zoteapp.getbidhaa, async req, res jaribu const conn await pool.getConnection; const rows await conn.queryCHAGUA KUTOKA kwa bidhaa; res.jsonsafu; kukamata kukosea console.errorkosa; res.status500.tumaHitilafu ya seva; ; Ongeza bidhaa mpyaapp.postbidhaa, async req, res jaribu const jina, bei req.body; const conn await pool.getConnection; const result await conn.queryINGIZA KWENYE bidhaa jina, bei THAMANI ?, ?, jina, bei; res.json id: result.insertId ; kukamata kukosea console.errorkosa; res.status500.tumaHitilafu ya seva; ; Sasisha bidhaaapp.putproducts:id, async req, res jaribu const jina, bei req.body; const id req.params; const conn await pool.getConnection; await conn.querySASISHA bidhaa SET name?, price? WHERE id?, jina, bei, id; res.sendBidhaa imesasishwa; kukamata kukosea console.errorkosa; res.status500.tumaHitilafu ya seva; ; Futa bidhaaapp.deleteproducts:id, async req, res jaribu const id req.params; const conn await pool.getConnection; await conn.queryFUTA KUTOKA KWA bidhaa WAPI id?, id; res.sendBidhaa imefutwa; kukamata kukosea console.errorkosa; res.status500.tumaHitilafu ya seva; ; Anzisha sevaconst PORT process.env.PORT 3000;app.listenPORT, console.logSeva inayoendesha kwenye bandari PORT; 