كيفية إنشاء تطبيق ويب باستخدام JavaScript وNode.js
مقالات من تأليف : مُدَوِّن حُرّ

كيفية إنشاء تطبيق ويب باستخدام JavaScript وNode.js

في عالم تطوير البرمجيات، يعتبر إنشاء تطبيق ويب من الأمور الأساسية التي يمكن تعلمها في البداية. يُعتبر JavaScript من أكثر اللغات المستخدمة لبناء تطبيقات الويب الحديثة، بينما يُعد Node.js بيئة تشغيل قوية تعتمد على JavaScript وتمكن المطورين من بناء تطبيقات خوادم سريعة وفعالة. في هذا المقال، سنتعرف على كيفية إنشاء تطبيق ويب باستخدام JavaScript وNode.js.

1. مقدمة عن JavaScript وNode.js

JavaScript هي لغة برمجة تُستخدم بشكل أساسي في تطوير واجهات المستخدم على الويب. يمكن استخدامها لإنشاء تفاعلات ديناميكية، مثل تغيير المحتوى أو التفاعل مع المستخدمين في الوقت الفعلي. من ناحية أخرى، Node.js هو بيئة تشغيل مبنية على محرك V8 من جوجل، مما يسمح بتشغيل JavaScript على الخادم بدلاً من المتصفح.

استخدام Node.js يسمح للمطورين بتطوير تطبيقات خادم باستخدام نفس اللغة التي يستخدمونها على الواجهة الأمامية، مما يسهل بناء التطبيقات بشكل أسرع وأكثر كفاءة.

2. المتطلبات الأساسية

قبل البدء في بناء تطبيق الويب، تحتاج إلى بعض الأدوات الأساسية:

  • Node.js: تأكد من أنك قد قمت بتثبيت Node.js على جهازك. يمكنك تنزيله من الموقع الرسمي لـ Node.js.
  • مدير الحزم npm: يأتي npm مع تثبيت Node.js، وهو أداة لإدارة الحزم والمكتبات التي ستحتاج إليها في مشروعك.

3. إعداد بيئة العمل

للبدء في إنشاء تطبيق الويب باستخدام Node.js، قم أولاً بإنشاء مجلد جديد للمشروع الخاص بك. بعد ذلك، افتح الطرفية (Terminal) في المجلد الذي أنشأته واكتب الأمر التالي لتهيئة مشروع Node.js:

“`bash npm init -y

npm install express

const express = require(‘express’); const app = express();

// إعداد نقطة نهاية لصفحة البداية app.get(‘/’, (req, res) => { res.send(‘مرحباً بك في تطبيق الويب باستخدام Node.js وExpress!’); });

// بدء الخادم على المنفذ 3000 app.listen(3000, () => { console.log(‘الخادم يعمل على http://localhost:3000’); });

node app.js

app.get(‘/about’, (req, res) => { res.send(’

حول التطبيق

هذا هو تطبيق ويب مبني باستخدام JavaScript وNode.js وExpress.

’); });

npm install mongoose

const mongoose = require(‘mongoose’);

// الاتصال بقاعدة البيانات mongoose.connect(‘mongodb://localhost/mydatabase’, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log(‘تم الاتصال بقاعدة البيانات بنجاح’); }) .catch((error) => { console.error(‘فشل الاتصال بقاعدة البيانات’, error); });

const articleSchema = new mongoose.Schema({ title: String, content: String, author: String, date: { type: Date, default: Date.now } });

const Article = mongoose.model(‘Article’, articleSchema);

app.post(‘/articles’, (req, res) => { const newArticle = new Article({ title: req.body.title, content: req.body.content, author: req.body.author });

newArticle.save() .then((article) => { res.status(201).send(article); }) .catch((error) => { res.status(400).send(error); }); });

10. التعامل مع البيانات من خلال النماذج

الآن، دعونا نضيف القدرة على التعامل مع البيانات في واجهتك باستخدام HTML. سنقوم بإنشاء نموذج بسيط لإضافة مقالة جديدة.

“`html



app.get(‘/articles’, (req, res) => { Article.find() .then((articles) => { res.json(articles); }) .catch((error) => { res.status(500).send(‘خطأ في عرض المقالات’); }); });

app.put(‘/articles/:id’, (req, res) => { const { id } = req.params; const { title, content, author } = req.body;

Article.findByIdAndUpdate(id, { title, content, author }, { new: true }) .then((updatedArticle) => { res.json(updatedArticle); }) .catch((error) => { res.status(400).send(‘خطأ في تحديث المقالة’); }); });

app.delete(‘/articles/:id’, (req, res) => { const { id } = req.params;

Article.findByIdAndDelete(id) .then(() => { res.status(200).send(‘تم حذف المقالة بنجاح’); }) .catch((error) => { res.status(400).send(‘خطأ في حذف المقالة’); }); });

npm install dotenv

DB_URI=mongodb://localhost/mydatabase PORT=3000

require(‘dotenv’).config();

const dbUri = process.env.DB_URI; const port = process.env.PORT || 3000;

mongoose.connect(dbUri, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log(‘تم الاتصال بقاعدة البيانات بنجاح’); }) .catch((error) => { console.error(‘فشل الاتصال بقاعدة البيانات’, error); });

app.listen(port, () => { console.log(الخادم يعمل على http://localhost:${port}); });

web: node app.js

git init heroku create git add . git commit -m “النسخة الأولى” git push heroku master

لماذا يعد الإنترنت السرعة العالية أمرًا حيويًا في المستقبل؟لماذا يعد الإنترنت السرعة العالية أمرًا حيويًا في المستقبل؟

16. تحسينات إضافية

بعد أن أصبح تطبيق الويب الأساسي جاهزًا، هناك بعض التحسينات التي يمكن إضافتها لجعل التطبيق أكثر كفاءة واحترافية.

16.1 إضافة التوثيق للمستخدمين

إذا كنت ترغب في إضافة طبقة أمان لتطبيقك، يمكنك إضافة عملية تسجيل الدخول والتوثيق للمستخدمين. يمكن استخدام مكتبات مثل Passport.js التي تدير التوثيق بشكل فعال.

لتثبيت Passport.js، استخدم الأمر التالي:

“`bash npm install passport passport-local express-session

npm install socket.io

const http = require(‘http’); const socketIo = require(‘socket.io’); const server = http.createServer(app); const io = socketIo(server);

io.on(‘connection’, (socket) => { console.log(‘مستخدم متصل’);

socket.on(‘disconnect’, () => { console.log(‘مستخدم مفصول’); }); });

server.listen(port, () => { console.log(الخادم يعمل على http://localhost:${port}); });

app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send(‘حدث خطأ في التطبيق!’); });

npm install mocha chai –save-dev

const assert = require(‘chai’).assert; const app = require(‘../app’); // استيراد تطبيقك const request = require(‘supertest’)(app);

describe(‘GET /’, () => { it(‘يجب أن يرسل رسالة ترحيب’, (done) => { request .get(‘/’) .end((err, res) => { assert.equal(res.status, 200); assert.equal(res.text, ‘مرحباً بك في تطبيق الويب باستخدام Node.js وExpress!’); done(); }); }); });

git init

git add .

git commit -m “إضافة ميزة جديدة”

git remote add origin https://github.com/username/repository.git git push -u origin master

21. استخدام خدمات الـ API الخارجية

في العديد من التطبيقات الحديثة، قد تحتاج إلى دمج البيانات من خدمات خارجية عبر APIs. يمكن أن يكون ذلك باستخدام خدمات مثل Google Maps، Twitter، أو حتى APIs خاصة بموارد الطقس.

21.1 استدعاء API خارجي

لإجراء طلبات HTTP إلى API خارجي، يمكنك استخدام مكتبة مثل axios أو node-fetch. لتثبيت axios، استخدم الأمر التالي:

“`bash npm install axios

const axios = require(‘axios’);

app.get(‘/weather’, (req, res) => { const city = req.query.city || ‘Riyadh’; const apiKey = ‘your_api_key_here’; const url = http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey};

axios.get(url) .then((response) => { res.json(response.data); }) .catch((error) => { res.status(500).send(‘حدث خطأ أثناء جلب البيانات من الـ API’); }); });

import React, { useState, useEffect } from ‘react’;

function Weather() { const [weather, setWeather] = useState(null);

useEffect(() => { fetch(‘/weather?city=Riyadh’) .then((response) => response.json()) .then((data) => setWeather(data)); }, []);

return (

  {weather ? (
    <div>
      <h1>حالة الطقس في {weather.name}</h1>
      <p>درجة الحرارة: {weather.main.temp}°C</p>
      <p>الحالة: {weather.weather[0].description}</p>
    </div>
  ) : (
    <p>جاري تحميل البيانات...</p>
  )}
</div>

); }

export default Weather;

npm install i18n

const i18n = require(‘i18n’); const path = require(‘path’);

i18n.configure({ locales: [‘en’, ‘ar’], directory: path.join(__dirname, ‘locales’), defaultLocale: ‘en’, objectNotation: true, });

app.use(i18n.init);

{ “greeting”: “Welcome to our website” }

{ “greeting”: “مرحبًا بك في موقعنا” }

app.get(‘/’, (req, res) => { res.send(req.__(‘greeting’)); });

npm install pm2 -g

pm2 start app.js

pm2 monit

npm install helmet cors

const helmet = require(‘helmet’); const cors = require(‘cors’);

app.use(helmet()); // حماية ضد بعض الهجمات الشائعة app.use(cors()); // تمكين الوصول من المصادر الأخرى

27. تحسين تجربة المستخدم

تعد تجربة المستخدم من العوامل الحاسمة في نجاح أي تطبيق ويب. تتضمن تحسينات تجربة المستخدم العديد من الجوانب مثل سرعة التحميل، التصميم التفاعلي، والتفاعل مع المستخدمين بشكل فعال. فيما يلي بعض النصائح لتحسين تجربة المستخدم في تطبيقك:

دليل خطوة بخطوة لبدء تعلم البرمجة من الصفردليل خطوة بخطوة لبدء تعلم البرمجة من الصفر

27.1 تحسين سرعة تحميل الصفحة

تعتبر سرعة تحميل الصفحة عاملاً رئيسياً في تحسين تجربة المستخدم. كلما كانت الصفحات أسرع في تحميلها، كلما زادت فرص بقاء المستخدمين في تطبيقك. بعض الطرق لتحسين السرعة:

  • ضغط الملفات: استخدم أدوات مثل Gzip أو Brotli لضغط ملفات HTML وCSS وJavaScript لتقليل حجم البيانات المنقولة بين الخادم والعميل.
  • تحميل الملفات بشكل غير متزامن (Async Loading): استخدم طريقة التحميل غير المتزامن للملفات مثل JavaScript وCSS لتقليل التأثير على وقت تحميل الصفحة.

27.2 تحسين واجهة المستخدم (UI/UX)

من الأمور الأساسية لتحسين تجربة المستخدم أن يكون تصميم واجهتك بسيطًا وجذابًا. إليك بعض النصائح التي يمكن أن تساعدك:

  • التصميم المتجاوب (Responsive Design): تأكد من أن تطبيقك يعمل بسلاسة على جميع الأجهزة، من الهواتف المحمولة إلى أجهزة الكمبيوتر المكتبية. استخدم تقنيات مثل CSS Grid وFlexbox لضمان التوافق عبر الأجهزة.
  • التفاعل مع المستخدم: احرص على أن تكون جميع التفاعلات سهلة وواضحة للمستخدم. استخدم تأثيرات تفاعلية مثل hover والانتقالات السلسة لتحسين تجربة التفاعل مع العناصر.
  • التنقل السهل: من المهم أن يكون التنقل في التطبيق واضحًا وسهلًا. اجعل المستخدمين قادرين على التنقل بسهولة بين الصفحات والمحتوى.

27.3 تحسين الوصول (Accessibility)

تعد إمكانية الوصول أمرًا أساسيًا لتلبية احتياجات جميع المستخدمين، بما في ذلك أولئك الذين يعانون من إعاقات. بعض الطرق التي يمكن أن تساعد في تحسين الوصول هي:

  • الصور البديلة (Alt Text): تأكد من أن جميع الصور تحتوي على نصوص بديلة (alt text) تشرح محتوى الصورة للمستخدمين الذين يستخدمون برامج قراءة الشاشة.
  • الخطوط القابلة للقراءة: اختر خطوطًا واضحة وسهلة القراءة. استخدم أحجام خطوط كافية وتباعد مناسب بين النصوص.
  • التنقل عبر لوحة المفاتيح: تأكد من أن المستخدمين يمكنهم التنقل عبر التطبيق بالكامل باستخدام لوحة المفاتيح فقط.

28. تطوير التطبيق باستخدام Microservices

عندما يتطور تطبيقك ويصبح أكثر تعقيدًا، قد تحتاج إلى تقسيمه إلى خدمات صغيرة وقابلة للتطوير تسمى “Microservices”. يستخدم هذا الأسلوب في التطبيقات الكبيرة التي تتطلب إدارة متعددة الأجزاء بشكل مرن ومستقل.

28.1 ما هو Microservices؟

Microservices هو أسلوب معماري حيث يتم تقسيم تطبيق واحد إلى مجموعة من الخدمات الصغيرة التي تعمل بشكل مستقل. يمكن لكل خدمة أن تُنفذ وظيفة معينة مثل إدارة المستخدمين، الدفع، أو إرسال الرسائل. يمكن تشغيل هذه الخدمات بشكل منفصل، مما يجعل التطبيق أكثر مرونة في التعامل مع التغيرات.

أفضل منصات بناء المواقع الإلكترونية للمبتدئينأفضل منصات بناء المواقع الإلكترونية للمبتدئين

28.2 كيف تبدأ مع Microservices

إذا كنت ترغب في تطبيق Microservices في مشروعك، يمكنك البدء باستخدام أدوات مثل Docker لإنشاء حاويات (containers) لكل خدمة، واستخدام Kubernetes لإدارة تلك الحاويات.

على سبيل المثال، يمكنك تقسيم تطبيق الويب إلى خدمات مثل:

  • خدمة تسجيل الدخول (Authentication Service)
  • خدمة إدارة المقالات (Article Management Service)
  • خدمة إرسال الإشعارات (Notification Service)

28.3 فوائد Microservices

  • المرونة في التطوير: يمكن لكل فريق عمل على خدمة مستقلة. هذا يعني أنه يمكن تحديث وإضافة وظائف دون التأثير على باقي التطبيق.
  • التوسع (Scalability): يمكن توسيع الخدمات بشكل مستقل بناءً على الطلب. إذا كان لديك طلب مرتفع على خدمة معينة (مثل خدمة المقالات)، يمكنك زيادة الموارد لهذه الخدمة فقط.

29. أدوات تطوير وتوثيق API

إن إنشاء واجهات برمجة التطبيقات (APIs) هو جزء أساسي من تطبيقات الويب الحديثة، حيث يمكن للتطبيقات المختلفة التفاعل مع بعضها البعض. عندما تقوم بتطوير API، من المهم أن تقوم بتوثيقه بشكل جيد لتمكين المطورين من استخدامه بسهولة.

29.1 استخدام Swagger لتوثيق API

يعد Swagger أداة شائعة لتوثيق APIs. يمكنك استخدام مكتبة مثل swagger-ui-express لتوثيق واجهات API الخاصة بك في Node.js.

لتثبيت Swagger، استخدم الأمر التالي:

“`bash npm install swagger-ui-express yamljs

const swaggerUi = require(‘swagger-ui-express’); const YAML = require(‘yamljs’); const swaggerDocument = YAML.load(‘./swagger.yaml’);

app.use(‘/api-docs’, swaggerUi.serve, swaggerUi.setup(swaggerDocument));

swagger: ‘2.0’ info: title: API للمقالات description: واجهة API لإدارة المقالات في تطبيق الويب version: 1.0.0 paths: /articles: get: description: الحصول على قائمة المقالات responses: 200: description: قائمة المقالات schema: type: array items: type: object properties: title: type: string content: type: string

32. تطوير تطبيقات الويب باستخدام أنماط تصميم معمارية حديثة

عندما يتطور التطبيق ويصبح أكثر تعقيدًا، يمكن أن يساعدك استخدام أنماط تصميم معمارية مختلفة في تحسين بنية التطبيق وجعل عملية التطوير أكثر مرونة وقابلية للتوسع. سنستعرض في هذا القسم بعض الأنماط المعمارية الحديثة التي يمكن أن تكون مفيدة عند بناء تطبيقات ويب باستخدام JavaScript وNode.js.

أفضل الأدوات المجانية لتعلم البرمجة على الإنترنتأفضل الأدوات المجانية لتعلم البرمجة على الإنترنت

32.1 نمط الـ MVC (Model-View-Controller)

يعد نمط الـ MVC من الأنماط الشائعة في تصميم التطبيقات التي تساعد في تنظيم الكود بطريقة تجعل من السهل إدارتها. في هذا النمط، يتم تقسيم التطبيق إلى ثلاثة مكونات رئيسية:

  • Model: يمثل البيانات والمنطق الخاص بالتطبيق.
  • View: مسؤول عن واجهة المستخدم وتنسيق البيانات.
  • Controller: مسؤول عن التعامل مع مدخلات المستخدم، تنفيذ منطق الأعمال، وتحديث الـ Model والـ View.

يمكنك استخدام هذا النمط مع Express أو أي إطار آخر في Node.js لتقسيم التطبيق إلى أجزاء يسهل التعامل معها وإجراء التغييرات عليها.

32.2 نمط الـ Microservices

كما ذكرنا سابقًا، يعتمد نمط الـ Microservices على تقسيم التطبيق إلى خدمات مستقلة صغيرة. في هذا النمط، لا يوجد تطبيق واحد ضخم، بل مجموعة من التطبيقات الصغيرة التي تتعاون مع بعضها البعض عبر واجهات الـ API. كل خدمة يمكن أن تكون مسؤولة عن جزء معين من النظام مثل إدارة المستخدمين، إدارة البيانات، أو الدفع.

32.3 نمط الـ Serverless

نمط الـ Serverless هو أسلوب معمارى يسمح لك بتطوير تطبيقات دون الحاجة لإدارة الخوادم أو البنية التحتية. في هذا النمط، تتم إدارة الخوادم من قبل مزود الخدمة السحابية، مثل AWS Lambda أو Azure Functions. يمكن أن يساعدك هذا النمط في التركيز على الكود الخاص بتطبيقك دون القلق بشأن البنية التحتية.

32.4 نمط الـ Event-Driven Architecture (EDA)

في هذا النمط، يتم تدفق الأحداث داخل النظام وتستجيب خدمات مختلفة لتلك الأحداث. يمكن أن يكون هذا النمط مفيدًا عندما تحتاج إلى التعامل مع نظام يحتوي على العديد من الأنشطة المترابطة والمتزامنة.

في Node.js، يمكنك استخدام مكتبات مثل EventEmitter للاستفادة من هذا النمط المعماري.

33. العمل مع فرق تطوير

عندما يعمل العديد من المطورين على نفس التطبيق، من المهم أن يتم التعاون بشكل جيد للحفاظ على الكود منظمًا وسهل التعديل. بعض الأدوات والتقنيات التي يمكن أن تساعدك في تحسين التعاون بين الفرق:

أفضل 10 دورات تدريبية للمطورين العرب في 2024أفضل 10 دورات تدريبية للمطورين العرب في 2024

33.1 استخدام Git وGitHub أو GitLab

كما ذكرنا سابقًا، يعد Git من الأدوات الأساسية في إدارة الكود البرمجي. تتيح لك خدمات مثل GitHub وGitLab التعاون بين المطورين من خلال إنشاء مستودعات (repositories) خاصة بالمشروع، وفتح فروع (branches) للعمل على ميزات مختلفة، ثم دمج (merge) التعديلات عند الانتهاء.

33.2 مراجعة الكود (Code Review)

من المهم أن تقوم بمراجعة الكود الذي يتم كتابته من قبل المطورين الآخرين قبل دمجه مع الكود الأساسي. يساعد ذلك في تقليل الأخطاء وضمان أن الكود يتم كتابته وفقًا للمعايير المتفق عليها.

يمكنك استخدام أدوات مثل GitHub أو GitLab لإجراء مراجعة للكود.

33.3 أدوات التعاون مثل Slack وTrello

تعد أدوات التعاون مثل Slack وTrello أساسية في أي فريق عمل. يمكن استخدامها لتنظيم الاجتماعات، تحديد المهام، ومتابعة تقدم المشروع. يمكن أيضًا دمج هذه الأدوات مع GitHub أو GitLab للحصول على إشعارات حول التعديلات التي يتم إجراؤها على المشروع.

34. استراتيجيات اختبار البرمجيات في Node.js

اختبار البرمجيات هو جزء أساسي من عملية تطوير التطبيقات لضمان أن الكود يعمل كما هو متوقع. في هذا القسم، سنتعرف على كيفية إجراء اختبارات شاملة لتطبيقك باستخدام أدوات وأطر عمل اختبار مشهورة في Node.js.

34.1 استخدام Mocha وChai لاختبارات الوحدة

Mocha هو إطار عمل لاختبارات الوحدة في Node.js، بينما Chai هو مكتبة للتأكد من صحة الاختبارات (assertion). معًا، يمكنهما توفير طريقة سهلة لكتابة اختبارات للكود.

لتثبيت Mocha وChai، استخدم الأمر التالي:

“`bash npm install mocha chai –save-dev

const assert = require(‘chai’).assert;

describe(‘Test addition function’, () => { it(‘يجب أن يرجع ناتج جمع 2 و 3 هو 5’, () => { const sum = 2 + 3; assert.equal(sum, 5); }); });

npm install supertest –save-dev

const request = require(‘supertest’); const app = require(‘../app’); // استيراد التطبيق

describe(‘GET /articles’, () => { it(‘يجب أن يعرض قائمة المقالات’, (done) => { request(app) .get(‘/articles’) .expect(200) .expect(‘Content-Type’, /json/) .end(done); }); });

npm install mongodb-memory-server –save-dev

أفضل الأدوات المجانية لتعلم البرمجة على الإنترنتأفضل الأدوات المجانية لتعلم البرمجة على الإنترنت

37. التعامل مع الأخطاء بشكل أفضل

واحدة من التحديات الكبرى في بناء تطبيقات الويب هي التعامل مع الأخطاء بشكل فعال، لضمان تجربة استخدام سلسة ولحماية التطبيق من الأعطال. عند العمل مع Node.js وExpress، يمكنك استخدام مجموعة من تقنيات التعامل مع الأخطاء التي تساعدك في اكتشاف وحل المشكلات بسرعة.

37.1 إنشاء Middleware لمعالجة الأخطاء

في Express، يمكنك استخدام Middleware مخصص للتعامل مع الأخطاء. يسمح لك ذلك بالتقاط الأخطاء في جميع أنحاء التطبيق وتوفير استجابة مخصصة للمستخدم.

على سبيل المثال:

“`javascript app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send(‘حدث خطأ غير متوقع! نحن نعمل على إصلاحه.’); });

app.get(‘/data’, async (req, res, next) => { try { const data = await getDataFromDatabase(); res.json(data); } catch (err) { next(err); // تمرير الخطأ إلى Middleware الخاص بالأخطاء } });

app.listen(3000, (err) => { if (err) { console.error(‘فشل تشغيل الخادم:’, err); } else { console.log(‘الخادم يعمل على http://localhost:3000’); } });

const helmet = require(‘helmet’); app.use(helmet());

npm install xss-clean

const xssClean = require(‘xss-clean’); app.use(xssClean());

npm install csurf

const csrf = require(‘csurf’); const csrfProtection = csrf({ cookie: true });

app.use(csrfProtection);

npm install joi

const Joi = require(‘joi’);

const schema = Joi.object({ username: Joi.string().min(3).required(), email: Joi.string().email().required(), });

app.post(‘/register’, (req, res) => { const { error } = schema.validate(req.body); if (error) { return res.status(400).send(error.details[0].message); } res.send(‘تم التسجيل بنجاح’); });

npm install redis

const redis = require(‘redis’); const client = redis.createClient();

app.get(‘/cached-data’, (req, res) => { client.get(‘my-key’, (err, data) => { if (data) { return res.json(JSON.parse(data)); // استخدام البيانات من الذاكرة المؤقتة } else { // في حال عدم وجود البيانات في الذاكرة المؤقتة const freshData = { key: ‘value’ }; client.setex(‘my-key’, 3600, JSON.stringify(freshData)); // تخزين البيانات في الذاكرة المؤقتة return res.json(freshData); } }); });

app.get(‘/data’, (req, res) => { res.set(‘Cache-Control’, ‘public, max-age=3600’); res.json({ data: ‘This is cached data’ }); });

git init

heroku create

git push heroku master

FROM node:14

WORKDIR /app COPY . .

RUN npm install

EXPOSE 3000 CMD [“node”, “app.js”]

docker build -t my-node-app .

docker run -p 3000:3000 my-node-app

42. ملاحظات ختامية

إن تطوير تطبيقات الويب باستخدام JavaScript وNode.js يتطلب الموازنة بين الكفاءة والأداء والأمان. في هذا المقال، حاولنا تغطية العديد من المواضيع المهمة التي تحتاجها لبناء تطبيق ويب كامل باستخدام هذه التقنيات. من التعامل مع قواعد البيانات، وتحسينات الأداء، إلى نشر التطبيقات في بيئات الإنتاج.

تذكر دائمًا أن التطوير لا يتوقف عند بناء التطبيق فقط؛ فالصيانة المستمرة، متابعة الأداء، وإصلاح الأخطاء تعد من العوامل الهامة لنجاح أي تطبيق في بيئة العمل الحقيقية.

إذا كنت قد تعلمت أو اكتشفت شيئًا جديدًا خلال قراءتك لهذا المقال، فنحن نأمل أن يكون قد قدم لك المعرفة والأدوات التي تحتاجها لبناء تطبيقات ويب قوية وآمنة.

أهمية التخزين السحابي وكيفية الاستفادة منه في عملكأهمية التخزين السحابي وكيفية الاستفادة منه في عملك

اقرأ المزيد