इस पोस्ट में, आप सीखेंगे कि उत्पादन-ग्रेड सर्वोत्तम प्रथाओं का पालन करके जावास्क्रिप्ट का उपयोग करके पुश नोटिफिकेशन कैसे लागू करें। सबसे अच्छी चीजों में से एक यह है कि मैं एक फ़ोल्डर संरचना भी प्रदान करूंगा, ताकि आप अपना प्रोजेक्ट आसानी से सेट कर सकें।
वास्तविक दुनिया के ऐप में पुश नोटिफिकेशन सेट करने के लिए सावधानीपूर्वक योजना की आवश्यकता होती है। मैं आपको दिखाऊंगा कि पेशेवर Node.js ऐप में इस सुविधा को कैसे बनाया जाए। हम आपके कोड को व्यवस्थित करने, चीजों को सुरक्षित रखने और यह सुनिश्चित करने जैसे महत्वपूर्ण हिस्सों को कवर करेंगे कि आपका ऐप बढ़ने पर भी यह अच्छी तरह से काम करे।
आरंभ करने के लिए, आपको अपने Node.js सर्वर से पुश सूचनाएं भेजने में मदद करने के लिए एक लाइब्रेरी की आवश्यकता है। वेब-पुश लाइब्रेरी सूचनाएं भेजने और आवश्यक कुंजियों को प्रबंधित करने के लिए उपकरण प्रदान करती है।
सबसे पहले, एक स्वच्छ और स्केलेबल कोडबेस बनाए रखने के लिए प्रोजेक्ट संरचना स्थापित करें:
/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
कार्यान्वयन में उतरने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित एनपीएम पैकेज स्थापित हैं:
bash npm install express mongoose web-push dotenv supertest
विभिन्न परिवेशों (जैसे, विकास, उत्पादन) के लिए कॉन्फ़िगरेशन फ़ाइलें बनाएं। ये फ़ाइलें पर्यावरण-विशिष्ट सेटिंग्स संग्रहीत करती हैं।
// /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 };
अपने उपयोगकर्ता स्कीमा और अधिसूचना सदस्यता को परिभाषित करने के लिए 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);
सेवाओं में सूचनाओं को संभालने के लिए तर्क को मॉड्यूलराइज़ करें।
// /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); }); } } };
एपीआई मार्गों को संभालें और सेवाओं को एकीकृत करें।
// /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); } };
अपने एपीआई के लिए मार्ग सेट करें।
// /routes/notificationRoutes.js const express = require('express'); const router = express.Router(); const notificationController = require('../controllers/notificationController'); router.post('/send', notificationController.sendNotification); module.exports = router;
ऐप क्रैश न हो यह सुनिश्चित करने के लिए त्रुटि प्रबंधन को केंद्रीकृत करें।
// /utils/errorHandler.js module.exports = (err, req, res, next) => { console.error(err.stack); res.status(500).send({ error: 'Something went wrong!' }); };
एप्लिकेशन को प्रारंभ करें और डेटाबेस से कनेक्ट करें।
// 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}`));
यह सुनिश्चित करने के लिए परीक्षण लिखें कि आपकी सेवा विभिन्न परिस्थितियों में अपेक्षा के अनुरूप काम करती है।
// /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'); }); });
यह उत्पादन-ग्रेड सेटअप सुनिश्चित करता है कि आपका पुश अधिसूचना सिस्टम स्केलेबल, सुरक्षित और रखरखाव योग्य है। उद्योग की सर्वोत्तम प्रथाओं का पालन करते हुए आसान परीक्षण, तैनाती और निगरानी का समर्थन करने के लिए कोड का आयोजन किया गया है। यदि आपके कोई और प्रश्न हैं या विशिष्ट कार्यान्वयन विवरण की आवश्यकता है, तो बेझिझक पूछें!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3