"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट का उपयोग करके पुश सूचनाएं लागू करना: एक उत्पादन-ग्रेड दृष्टिकोण

जावास्क्रिप्ट का उपयोग करके पुश सूचनाएं लागू करना: एक उत्पादन-ग्रेड दृष्टिकोण

2024-11-08 को प्रकाशित
ब्राउज़ करें:220

Implementing Push Notifications Using JavaScript: A Production-Grade Approach

इस पोस्ट में, आप सीखेंगे कि उत्पादन-ग्रेड सर्वोत्तम प्रथाओं का पालन करके जावास्क्रिप्ट का उपयोग करके पुश नोटिफिकेशन कैसे लागू करें। सबसे अच्छी चीजों में से एक यह है कि मैं एक फ़ोल्डर संरचना भी प्रदान करूंगा, ताकि आप अपना प्रोजेक्ट आसानी से सेट कर सकें।

वास्तविक दुनिया के ऐप में पुश नोटिफिकेशन सेट करने के लिए सावधानीपूर्वक योजना की आवश्यकता होती है। मैं आपको दिखाऊंगा कि पेशेवर Node.js ऐप में इस सुविधा को कैसे बनाया जाए। हम आपके कोड को व्यवस्थित करने, चीजों को सुरक्षित रखने और यह सुनिश्चित करने जैसे महत्वपूर्ण हिस्सों को कवर करेंगे कि आपका ऐप बढ़ने पर भी यह अच्छी तरह से काम करे।

आरंभ करने के लिए, आपको अपने Node.js सर्वर से पुश सूचनाएं भेजने में मदद करने के लिए एक लाइब्रेरी की आवश्यकता है। वेब-पुश लाइब्रेरी सूचनाएं भेजने और आवश्यक कुंजियों को प्रबंधित करने के लिए उपकरण प्रदान करती है।

1. पुश अधिसूचना: परियोजना संरचना

सबसे पहले, एक स्वच्छ और स्केलेबल कोडबेस बनाए रखने के लिए प्रोजेक्ट संरचना स्थापित करें:

/notification-service
├── /config
│   ├── default.js
│   └── production.js
├── /controllers
│   └── notificationController.js
├── /models
│   └── user.js
├── /routes
│   └── notificationRoutes.js
├── /services
│   ├── notificationService.js
│   ├── subscriptionService.js
│   └── webPushService.js
├── /utils
│   └── errorHandler.js
├── /tests
│   └── notification.test.js
├── app.js
├── package.json
├── .env
└── README.md

आवश्यक एनपीएम पैकेज

कार्यान्वयन में उतरने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित एनपीएम पैकेज स्थापित हैं:

  • एक्सप्रेस: ​​एक न्यूनतम और लचीला Node.js वेब एप्लिकेशन ढांचा।
  • mongoose: MongoDB और Node.js के लिए एक ODM (ऑब्जेक्ट डेटा मॉडलिंग) लाइब्रेरी।
  • वेब-पुश: वेब पुश प्रोटोकॉल का उपयोग करके पुश सूचनाएं भेजने के लिए एक लाइब्रेरी।
  • dotenv: एक शून्य-निर्भरता मॉड्यूल जो एक .env फ़ाइल से पर्यावरण चर लोड करता है।
  • सुपरटेस्ट: Node.js में HTTP दावे के परीक्षण के लिए एक लाइब्रेरी।

npm का उपयोग करके इन पैकेजों को स्थापित करें:

bash

npm install express mongoose web-push dotenv supertest

2. पुश अधिसूचना: परियोजना विन्यास

विभिन्न परिवेशों (जैसे, विकास, उत्पादन) के लिए कॉन्फ़िगरेशन फ़ाइलें बनाएं। ये फ़ाइलें पर्यावरण-विशिष्ट सेटिंग्स संग्रहीत करती हैं।

// /config/default.js
module.exports = {
    server: {
        port: 3000,
        env: 'development'
    },
    pushNotifications: {
        publicVapidKey: process.env.VAPID_PUBLIC_KEY,
        privateVapidKey: process.env.VAPID_PRIVATE_KEY,
        gcmApiKey: process.env.GCM_API_KEY
    },
    db: {
        uri: process.env.MONGO_URI
    }
};
// /config/production.js
module.exports = {
    server: {
        port: process.env.PORT || 3000,
        env: 'production'
    },
    // Same structure as default, with production-specific values
};

3. डेटाबेस की मॉडलिंग

अपने उपयोगकर्ता स्कीमा और अधिसूचना सदस्यता को परिभाषित करने के लिए Mongoose का उपयोग करें।

// /models/user.js
const mongoose = require('mongoose');

const subscriptionSchema = new mongoose.Schema({
    endpoint: String,
    keys: {
        p256dh: String,
        auth: String
    }
});

const userSchema = new mongoose.Schema({
    email: { type: String, required: true, unique: true },
    subscriptions: [subscriptionSchema],
    preferences: {
        pushNotifications: { type: Boolean, default: true }
    }
});

module.exports = mongoose.model('User', userSchema);

4. अधिसूचना सेवाएँ

सेवाओं में सूचनाओं को संभालने के लिए तर्क को मॉड्यूलराइज़ करें।

// /services/webPushService.js
const webPush = require('web-push');
const config = require('config');

webPush.setVapidDetails(
    'mailto:[email protected]',
    config.get('pushNotifications.publicVapidKey'),
    config.get('pushNotifications.privateVapidKey')
);

module.exports = {
    sendNotification: async (subscription, payload) => {
        try {
            await webPush.sendNotification(subscription, JSON.stringify(payload));
        } catch (error) {
            console.error('Error sending notification', error);
        }
    }
};
// /services/notificationService.js
const User = require('../models/user');
const webPushService = require('./webPushService');

module.exports = {
    sendPushNotifications: async (userId, payload) => {
        const user = await User.findById(userId);
        if (user && user.preferences.pushNotifications) {
            user.subscriptions.forEach(subscription => {
                webPushService.sendNotification(subscription, payload);
            });
        }
    }
};

5. नियंत्रक तर्क

एपीआई मार्गों को संभालें और सेवाओं को एकीकृत करें।

// /controllers/notificationController.js
const notificationService = require('../services/notificationService');

exports.sendNotification = async (req, res, next) => {
    try {
        const { userId, title, body } = req.body;
        const payload = { title, body };
        await notificationService.sendPushNotifications(userId, payload);
        res.status(200).json({ message: 'Notification sent successfully' });
    } catch (error) {
        next(error);
    }
};

6. रूटिंग

अपने एपीआई के लिए मार्ग सेट करें।

// /routes/notificationRoutes.js
const express = require('express');
const router = express.Router();
const notificationController = require('../controllers/notificationController');

router.post('/send', notificationController.sendNotification);

module.exports = router;

7. त्रुटि प्रबंधन

ऐप क्रैश न हो यह सुनिश्चित करने के लिए त्रुटि प्रबंधन को केंद्रीकृत करें।

// /utils/errorHandler.js
module.exports = (err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send({ error: 'Something went wrong!' });
};

8. एप्लिकेशन एंट्री प्वाइंट

एप्लिकेशन को प्रारंभ करें और डेटाबेस से कनेक्ट करें।

// app.js
const express = require('express');
const mongoose = require('mongoose');
const config = require('config');
const notificationRoutes = require('./routes/notificationRoutes');
const errorHandler = require('./utils/errorHandler');

const app = express();

app.use(express.json());
app.use('/api/notifications', notificationRoutes);
app.use(errorHandler);

mongoose.connect(config.get('db.uri'), {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
    .then(() => console.log('MongoDB connected...'))
    .catch(err => console.error('MongoDB connection error:', err));

const PORT = config.get('server.port');
app.listen(PORT, () => console.log(`Server running in ${config.get('server.env')} mode on port ${PORT}`));

9. सुरक्षा आचरण

  • पर्यावरण चर: पर्यावरण चर में एपीआई कुंजी और डेटाबेस यूआरआई जैसी संवेदनशील जानकारी संग्रहीत करें।
  • HTTPS: क्लाइंट और सर्वर के बीच संचार को सुरक्षित करने के लिए अपने एप्लिकेशन को HTTPS पर परोसें।
  • सामग्री सुरक्षा नीति (सीएसपी): क्रॉस-साइट स्क्रिप्टिंग (एक्सएसएस) हमलों को रोकने के लिए सीएसपी हेडर लागू करें।
  • रेट लिमिटिंग: अपने एपीआई को क्रूर-बल के हमलों से बचाने के लिए एक्सप्रेस-रेट-लिमिट जैसे मिडलवेयर का उपयोग करें।

10. परीक्षण

यह सुनिश्चित करने के लिए परीक्षण लिखें कि आपकी सेवा विभिन्न परिस्थितियों में अपेक्षा के अनुरूप काम करती है।

// /tests/notification.test.js
const request = require('supertest');
const app = require('../app');

describe('Notification API', () => {
    it('should send a notification', async () => {
        const res = await request(app)
            .post('/api/notifications/send')
            .send({ userId: 'someUserId', title: 'Test', body: 'This is a test' });
        expect(res.statusCode).toEqual(200);
        expect(res.body.message).toBe('Notification sent successfully');
    });
});

11. उत्पादन में तैनाती

  • सीआई/सीडी पाइपलाइन: अपने एप्लिकेशन के परीक्षण, निर्माण और तैनाती को स्वचालित करने के लिए जेनकिंस, गिटहब एक्शन, या गिटलैब सीआई जैसे टूल का उपयोग करके सीआई/सीडी पाइपलाइन स्थापित करें।
  • कंटेनरीकरण: विभिन्न परिवेशों में एकरूपता सुनिश्चित करने के लिए अपने एप्लिकेशन को डॉकराइज़ करें।
  • निगरानी: अपने एप्लिकेशन के स्वास्थ्य और प्रदर्शन को ट्रैक करने के लिए प्रोमेथियस और ग्राफाना जैसे निगरानी उपकरणों का उपयोग करें।

12. स्केलिंग

  • क्षैतिज स्केलिंग: उच्च ट्रैफ़िक को संभालने के लिए लोड बैलेंसर के पीछे अपनी सेवा के कई उदाहरण तैनात करें।
  • डेटाबेस स्केलिंग: अपने डेटाबेस की क्षैतिज स्केलिंग के लिए MongoDB में शार्डिंग या प्रतिकृति सेट लागू करें।

यह उत्पादन-ग्रेड सेटअप सुनिश्चित करता है कि आपका पुश अधिसूचना सिस्टम स्केलेबल, सुरक्षित और रखरखाव योग्य है। उद्योग की सर्वोत्तम प्रथाओं का पालन करते हुए आसान परीक्षण, तैनाती और निगरानी का समर्थन करने के लिए कोड का आयोजन किया गया है। यदि आपके कोई और प्रश्न हैं या विशिष्ट कार्यान्वयन विवरण की आवश्यकता है, तो बेझिझक पूछें!

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/shanu001x/implementing-push-notifications-using-javascript-a-production-grade-approach-1nmf?1 यदि कोई उल्लंघन है, तो कृपया [email protected] पर संपर्क करें। इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3