परिचय: क्यों TypeScript और PostgreSQL आपके प्रोजेक्ट के लिए एक आदर्श जोड़ी हैं
\n\nक्या आपने कभी सोचा है कि डेवलपर्स क्यों तेजी से TypeScript और PostgreSQL के संयोजन को चुन रहे हैं? यह सिर्फ एक फैशनेबल ट्रेंड नहीं है - यह एक शक्तिशाली जोड़ी है जो आधुनिक वेब डेवलपमेंट में खेल के नियमों को बदल रही है। एक ही पैकेज में एक स्विस चाकू और एक विश्वसनीय तिजोरी की कल्पना करें: TypeScript कोड में कठोरता और पूर्वानुमान लाता है, जबकि PostgreSQL डेटा भंडारण में विश्वसनीयता और लचीलापन लाता है।
\n\nइस गाइड में, हम सिर्फ सिद्धांत पर नहीं चलेंगे। हम वास्तविक अभ्यास में उतरेंगे: कनेक्शन सेट करेंगे, क्वेरी लिखेंगे, API बनाएंगे और सामान्य गलतियों से कैसे बचें, यह समझेंगे। तैयार हैं? चलिए शुरू करते हैं!
\n\nवातावरण सेटअप: TypeScript और PostgreSQL के साथ काम शुरू करना
\n\nकोड लिखने से पहले, आइए जमीन तैयार करें। डिपेंडेंसी इंस्टॉल करना एक घर की नींव की तरह है: जितनी मजबूत होगी, प्रोजेक्ट उतना ही लंबा चलेगा।
\n\nआवश्यक पैकेज इंस्टॉल करना
\n\nहमें दो मुख्य टूल की आवश्यकता होगी: pg (PostgreSQL के लिए क्लाइंट) और typescript टाइप्स के साथ। टर्मिनल में निष्पादित करें:
npm init -y\nnpm install pg\nnpm install -D typescript @types/node @types/pg\nnpx tsc --init\n\n\nध्यान दें: हम pg के लिए टाइप्स अलग से इंस्टॉल कर रहे हैं। TypeScript डेटाबेस के साथ काम करने के लिए यह अनिवार्य शर्त है - अन्यथा कंपाइलर टाइप्स की कमी पर त्रुटि देगा।
प्रोजेक्ट की मूल संरचना
\n\nएक फ़ाइल database.ts बनाएं - यह हमारे कनेक्शन का दिल होगा। यहाँ एक न्यूनतम लेकिन काम करने वाला टेम्पलेट है:
import { Pool } from 'pg';\n\nconst pool = new Pool({\n user: 'your_username',\n host: 'localhost',\n database: 'your_database',\n password: 'your_password',\n port: 5432,\n});\n\nexport default pool;\n\n\nPool क्यों, सामान्य क्लाइंट क्यों नहीं? Pool कनेक्शन के पूल को प्रबंधित करता है, जो प्रोडक्शन के लिए महत्वपूर्ण है। कल्पना करें कि हर अनुरोध एक कैफे का आगंतुक है। पूल के बिना, आप हर ग्राहक के लिए एक नया कैफे खोलेंगे। पूल के साथ, आपके पास पहले से कई टेबल हैं, और आप बस मेहमानों को बैठाते हैं।
मुख्य संचालन: PostgreSQL के साथ TypeScript पर CRUD
\n\nअब सबसे दिलचस्प हिस्सा - क्वेरी लिखना। हम एक सरल उपयोगकर्ता तालिका बनाएंगे और सभी चार ऑपरेशन लागू करेंगे: Create, Read, Update, Delete।
\n\nतालिका बनाना
\n\nडेटा के साथ काम करने से पहले संरचना बनानी होगी। TypeScript के माध्यम से इसे कैसे करें:
\n\nimport pool from './database';\n\nasync function createTable() {\n const query = `\n CREATE TABLE IF NOT EXISTS users (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100) NOT NULL,\n email VARCHAR(255) UNIQUE NOT NULL,\n age INTEGER CHECK (age > 0),\n created_at TIMESTAMP DEFAULT NOW()\n );\n `;\n \n try {\n await pool.query(query);\n console.log('तालिका users बनाई गई');\n } catch (error) {\n console.error('त्रुटि:', error);\n }\n}\n\ncreateTable();\n\n\nSERIAL पर ध्यान दें - यह ऑटो-इंक्रीमेंट है जिसे PostgreSQL स्वयं उत्पन्न करता है। और CHECK गारंटी देता है कि उम्र सकारात्मक होगी। यह एक उदाहरण है कि कैसे PostgreSQL TypeScript मिलकर दो स्तरों पर डेटा अखंडता सुनिश्चित करते हैं।
डेटा जोड़ना (Create)
\n\nपैरामीटर के साथ इंसर्शन SQL इंजेक्शन से बचने का एक सुरक्षित तरीका है:
\n\ninterface User {\n name: string;\n email: string;\n age: number;\n}\n\nasync function addUser(user: User) {\n const query = `\n INSERT INTO users (name, email, age)\n VALUES ($1, $2, $3)\n RETURNING *;\n `;\n \n const values = [user.name, user.email, user.age];\n \n try {\n const result = await pool.query(query, values);\n console.log('उपयोगकर्ता जोड़ा गया:', result.rows[0]);\n return result.rows[0];\n } catch (error) {\n console.error('जोड़ने में त्रुटि:', error);\n throw error