كيفية استخدام تطبيقات الأجهزة المحمولة Node.js SDK

توفر هذه المقالة معلومات مفصلة وأمثلة توضح كيفية العمل مع Node.js الخلفية في ميزة تطبيقات الأجهزة المحمولة في Azure App Service.

مقدمة

توفر تطبيقات الأجهزة المحمولة القدرة على إضافة واجهة برمجة تطبيقات ويب للوصول إلى البيانات المحسنة للأجهزة المحمولة إلى تطبيق ويب. يتم توفير SDK لتطبيقات الأجهزة المحمولة لتطبيقات الويب ASP.NET Node.js. يوفر SDK العمليات التالية:

  • عمليات الجدول (قراءة، إدراج، تحديث، حذف) للوصول إلى البيانات
  • عمليات واجهة برمجة التطبيقات المخصصة

توفر كلتا العمليتين المصادقة عبر جميع موفري الهوية التي تسمح بها Azure App Service. يتضمن هؤلاء الموفرون موفري الهوية الاجتماعية مثل Facebook وTwitter وGoogle وMicrosoft، بالإضافة إلى Azure Active Directory لهوية المؤسسة.

يمكنك العثور على نماذج لكل حالة استخدام في دليل العينات على GitHub.

الأنظمة الأساسية المدعومة

تدعم تطبيقات الأجهزة المحمولة Node.js SDK إصدار LTS الحالي للعقدة والإصدارات الأحدث. حاليا، أحدث إصدار LTS هو Node v4.5.0. قد تعمل الإصدارات الأخرى من العقدة ولكنها غير مدعومة.

تدعم تطبيقات الأجهزة المحمولة Node.js SDK برنامجي تشغيل قاعدة البيانات:

  • يدعم برنامج تشغيل node-mssql قاعدة بيانات Azure SQL ومثيلات SQL Server المحلية.
  • يدعم برنامج تشغيل sqlite3 قواعد بيانات SQLite على مثيل واحد فقط.

إنشاء Node.js الأساسية الخلفية باستخدام سطر الأوامر

تبدأ كل تطبيقات الأجهزة المحمولة Node.js الخلفية كتطبيق ExpressJS. ExpressJS هو إطار خدمة الويب الأكثر شيوعا المتاح Node.js. يمكنك إنشاء تطبيق Express أساسي كما يلي:

  1. في نافذة أمر أو PowerShell، قم بإنشاء دليل لمشروعك:

     mkdir basicapp
    
  2. قم بتشغيل npm init لتهيئة بنية الحزمة:

     cd basicapp
     npm init
    

    npm init يطرح الأمر مجموعة من الأسئلة لتهيئة المشروع. راجع مثال الإخراج:

    The npm init output

  3. express تثبيت المكتبات و azure-mobile-apps من مستودع npm:

     npm install --save express azure-mobile-apps
    
  4. إنشاء ملف app.js لتنفيذ الخادم المحمول الأساسي:

    var express = require('express'),
        azureMobileApps = require('azure-mobile-apps');
    
    var app = express(),
        mobile = azureMobileApps();
    
    // Define a TodoItem table.
    mobile.tables.add('TodoItem');
    
    // Add the Mobile API so it is accessible as a Web API.
    app.use(mobile);
    
    // Start listening on HTTP.
    app.listen(process.env.PORT || 3000);
    

ينشئ هذا التطبيق واجهة برمجة تطبيقات ويب محسنة للأجهزة المحمولة بنقطة نهاية واحدة (/tables/TodoItem) توفر وصولا غير مصادق عليه إلى مخزن بيانات SQL أساسي باستخدام مخطط ديناميكي. وهي مناسبة لمتابعة عمليات التشغيل السريع لمكتبة العميل:

يمكنك العثور على التعليمات البرمجية لهذا التطبيق الأساسي في نموذج basicapp على GitHub.

إنشاء نهاية خلفية Node.js باستخدام Visual Studio 2015

يتطلب Visual Studio 2015 تمديدا لتطوير تطبيقات Node.js داخل IDE. للبدء، قم بتثبيت أدواتNode.js 1.1 Visual Studio. عند الانتهاء من التثبيت، قم بإنشاء تطبيق Express 4.x:

  1. افتح مربع الحوار Project جديد (من ملف>جديد>Project).

  2. توسيع قوالب>JavaScript>Node.js.

  3. حدد Basic Azure Node.js Express 4 Application.

  4. املأ اسم المشروع. حدد "OK".

    Visual Studio 2015 new project

  5. انقر بزر الماوس الأيمن فوق عقدة npm وحدد Install New npm packages.

  6. قد تحتاج إلى تحديث كتالوج npm بعد إنشاء أول تطبيق Node.js. حدد تحديث إذا لزم الأمر.

  7. أدخل azure-mobile-apps في مربع البحث. حدد حزمة azure-mobile-apps 2.0.0 ، ثم حدد Install Package.

    Install new npm packages

  8. حدد ⁧⁩Close⁧⁩.

  9. افتح ملف app.js لإضافة دعم ل Mobile Apps SDK. في السطر 6 في أسفل عبارات المكتبة require ، أضف التعليمات البرمجية التالية:

    var bodyParser = require('body-parser');
    var azureMobileApps = require('azure-mobile-apps');
    

    في السطر 27 تقريبا بعد العبارات الأخرى app.use ، أضف التعليمات البرمجية التالية:

    app.use('/users', users);
    
    // Mobile Apps initialization
    var mobile = azureMobileApps();
    mobile.tables.add('TodoItem');
    app.use(mobile);
    

    احفظ الملف.

  10. إما تشغيل التطبيق محليا (يتم تقديم واجهة برمجة التطبيقات على https://localhost:3000) أو النشر إلى Azure.

إنشاء Node.js الخلفية باستخدام مدخل Microsoft Azure

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

  1. سجّل الدخول إلى مدخل Azure.

  2. حدد +NEW>Web + Mobile>Mobile App، ثم أدخل اسما لواجهة تطبيقات الجوال الخلفية.

  3. بالنسبة لمجموعة الموارد، حدد مجموعة موارد موجودة، أو أنشئ مجموعة جديدة (باستخدام نفس اسم تطبيقك).

  4. بالنسبة لخطة App Service، يتم تحديد الخطة الافتراضية (في المستوى القياسي). يمكنك أيضا تحديد خطة مختلفة، أو إنشاء خطة جديدة.

    تحدد إعدادات خطة App Service الموقع والميزات والتكلفة وموارد الحوسبة المقترنة بتطبيقك. لمزيد من المعلومات حول خطط App Service وكيفية إنشاء خطة جديدة في مستوى تسعير مختلف وفي الموقع المطلوب، راجع نظرة عامة متعمقة على خطط Azure App Service.

  5. حدد Create. تنشئ هذه الخطوة النهاية الخلفية لتطبيقات الأجهزة المحمولة.

  6. في جزء الإعدادات للواجهة الخلفية الجديدة لتطبيقات الأجهزة المحمولة، حدد التشغيل> السريع للنظام الأساسي > لتطبيق العميل الاتصال قاعدة بيانات.

    Selections for connecting a database

  7. في جزء Add data connection، حدد SQL Database>Create a new database. أدخل اسم قاعدة البيانات، واختر مستوى التسعير، ثم حدد الخادم. يمكنك إعادة استخدام قاعدة البيانات الجديدة هذه. إذا كان لديك بالفعل قاعدة بيانات في نفس الموقع، يمكنك بدلا من ذلك اختيار استخدام قاعدة بيانات موجودة. لا نوصي باستخدام قاعدة بيانات في موقع مختلف، بسبب تكاليف النطاق الترددي وزمن انتقال أعلى.

    Selecting a database

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

  9. مرة أخرى في جزء إضافة اتصال البيانات ، حدد سلسلة الاتصال، وأدخل قيم تسجيل الدخول وكلمة المرور لقاعدة البيانات الخاصة بك، وحدد موافق.

    انتظر بضع دقائق حتى يتم نشر قاعدة البيانات بنجاح قبل المتابعة.

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

قم بتنزيل مشروع التعليمات البرمجية للتشغيل السريع Node.js الخلفية باستخدام Git

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

يستخدم الإجراء التالي مستودع Git لتنزيل رمز مشروع التشغيل السريع:

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

  2. راجع إعداد المستودع الخاص بك لتمكين مستودع Git لموقعك الخلفي. دون اسم المستخدم وكلمة المرور للتوزيع.

  3. في جزء الواجهة الخلفية لتطبيقات الأجهزة المحمولة، دون ملاحظة عن إعداد عنوان URL الخاص باستنساخ Git .

  4. git clone تنفيذ الأمر باستخدام عنوان URL الخاص باستنساخ Git. أدخل كلمة المرور عند الحاجة، كما في المثال التالي:

     $ git clone https://username@todolist.scm.azurewebsites.net:443/todolist.git
    
  5. استعرض للوصول إلى الدليل المحلي (/todolist في المثال السابق)، ولاحظ أنه تم تنزيل ملفات المشروع. حدد موقع ملف todoitem.json في /tables الدليل. يعرف هذا الملف الأذونات الموجودة في الجدول. ابحث أيضا عن ملف todoitem.js في نفس الدليل. وهو يحدد البرامج النصية لعملية CRUD للجدول.

  6. بعد إجراء تغييرات على ملفات المشروع، قم بتشغيل الأوامر التالية لإضافة التغييرات إلى الموقع وتثبيتها ثم تحميلها:

     $ git commit -m "updated the table script"
     $ git push origin master
    

    عند إضافة ملفات جديدة إلى المشروع، تحتاج أولا إلى تشغيل git add . الأمر.

تتم إعادة نشر الموقع في كل مرة يتم فيها دفع مجموعة جديدة من التثبيتات إلى الموقع.

نشر Node.js الخلفية إلى Azure

يوفر Microsoft Azure العديد من الآليات لنشر تطبيقات الأجهزة المحمولة الخاصة بك Node.js الخلفية لخدمة Azure. تتضمن هذه الآليات أدوات التوزيع المدمجة في Visual Studio وأدوات سطر الأوامر وخيارات النشر المستمر استنادا إلى التحكم بالمصادر. لمزيد من المعلومات، راجع دليل توزيع Azure App Service.

لدى Azure App Service نصيحة محددة لتطبيقات Node.js التي يجب مراجعتها قبل نشر النهاية الخلفية:

تمكين صفحة الصفحة الرئيسية لتطبيقك

العديد من التطبيقات هي مزيج من تطبيقات الويب والهاتف المحمول. يمكنك استخدام إطار عمل ExpressJS لدمج الوجهين. ومع ذلك، قد ترغب في بعض الأحيان في تنفيذ واجهة الجوال فقط. من المفيد توفير صفحة منزلية للتأكد من أن خدمة التطبيق قيد التشغيل. يمكنك إما توفير الصفحة الرئيسية الخاصة بك أو تمكين صفحة الصفحة الرئيسية المؤقتة. لتمكين صفحة الصفحة الرئيسية المؤقتة، استخدم التعليمات البرمجية التالية لإنشاء مثيل لتطبيقات الأجهزة المحمولة:

var mobile = azureMobileApps({ homePage: true });

إذا كنت تريد أن يتوفر هذا الخيار فقط عند التطوير محليا، يمكنك إضافة هذا الإعداد إلى ملف azureMobile.js.

عمليات الجدول

يوفر azure-mobile-apps Node.js Server SDK آليات لعرض جداول البيانات المخزنة في Azure SQL Database كواجهة برمجة تطبيقات ويب. ويوفر خمس عمليات:

‏‏التشغيل الوصف
GET /tables/tablename الحصول على كافة السجلات في الجدول.
GET /tables/tablename/:id احصل على سجل معين في الجدول.
POST /tables/tablename إنشاء سجل في الجدول.
PATCH /tables/tablename/:id تحديث سجل في الجدول.
DELETE /tables/tablename/:id حذف سجل في الجدول.

تدعم واجهة برمجة تطبيقات الويب هذه OData وتوسع مخطط الجدول لدعم مزامنة البيانات دون اتصال.

تعريف الجداول باستخدام مخطط ديناميكي

قبل أن تتمكن من استخدام جدول، يجب تعريفه. يمكنك تعريف الجداول باستخدام مخطط ثابت (حيث تقوم بتعريف الأعمدة في المخطط) أو ديناميكيا (حيث يتحكم SDK في المخطط استنادا إلى الطلبات الواردة). بالإضافة إلى ذلك، يمكنك التحكم في جوانب معينة من واجهة برمجة تطبيقات الويب عن طريق إضافة تعليمة JavaScript البرمجية إلى التعريف.

كأفضل ممارسة، يجب تعريف كل جدول في ملف JavaScript في tables الدليل، ثم استخدام tables.import() الأسلوب لاستيراد الجداول. توسيع نموذج التطبيق الأساسي، يمكنك ضبط ملف app.js:

var express = require('express'),
    azureMobileApps = require('azure-mobile-apps');

var app = express(),
    mobile = azureMobileApps();

// Define the database schema that is exposed.
mobile.tables.import('./tables');

// Provide initialization of any tables that are statically defined.
mobile.tables.initialize().then(function () {
    // Add the Mobile API so it is accessible as a Web API.
    app.use(mobile);

    // Start listening on HTTP.
    app.listen(process.env.PORT || 3000);
});

تعريف الجدول في ./tables/TodoItem.js:

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Additional configuration for the table goes here.

module.exports = table;

تستخدم الجداول مخططا ديناميكيا بشكل افتراضي. لإيقاف تشغيل المخطط الديناميكي عالميا، قم بتعيين MS_DynamicSchema إعداد التطبيق إلى false في مدخل Microsoft Azure.

يمكنك العثور على مثال كامل في نموذج todo على GitHub.

تعريف الجداول باستخدام مخطط ثابت

يمكنك تعريف الأعمدة بشكل صريح لعرضها عبر واجهة برمجة تطبيقات الويب. يضيف azure-mobile-apps Node.js SDK تلقائيا أي أعمدة إضافية مطلوبة لمزامنة البيانات دون اتصال بالقائمة التي توفرها. على سبيل المثال، تتطلب تطبيقات عميل التشغيل السريع جدولا بعمودين: text (سلسلة) و complete (منطقي).
يمكن تعريف الجدول في ملف JavaScript لتعريف الجدول (الموجود في tables الدليل) كما يلي:

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Define the columns within the table.
table.columns = {
    "text": "string",
    "complete": "boolean"
};

// Turn off the dynamic schema.
table.dynamicSchema = false;

module.exports = table;

إذا قمت بتعريف الجداول بشكل ثابت، يجب عليك أيضا استدعاء tables.initialize() الأسلوب لإنشاء مخطط قاعدة البيانات عند بدء التشغيل. يقوم tables.initialize() الأسلوب بإرجاع وعد بحيث لا تخدم خدمة الويب الطلبات قبل تهيئة قاعدة البيانات.

استخدام SQL Server Express كمخزن بيانات تطوير على جهازك المحلي

توفر تطبيقات الأجهزة المحمولة Node.js SDK ثلاثة خيارات لخدمة البيانات خارج الصندوق:

  • استخدم برنامج تشغيل الذاكرة لتوفير مخزن أمثلة غير دائم.
  • استخدم برنامج تشغيل mssql لتوفير مخزن بيانات SQL Server Express للتطوير.
  • استخدم برنامج تشغيل mssql لتوفير مخزن بيانات Azure SQL Database للإنتاج.

تستخدم تطبيقات الأجهزة المحمولة Node.js SDK حزمة Node.js mssql لإنشاء اتصال بكل من SQL Server Express وقاعدة بيانات SQL واستخدامه. تتطلب هذه الحزمة تمكين اتصالات TCP على مثيل SQL Server Express.

تلميح

لا يوفر برنامج تشغيل الذاكرة مجموعة كاملة من المرافق للاختبار. إذا كنت ترغب في اختبار النهاية الخلفية محليا، نوصي باستخدام مخزن بيانات SQL Server Express وبرنامج تشغيل mssql.

  1. قم بتنزيل Microsoft SQL Server 2014 Express وتثبيته. تأكد من تثبيت إصدار SQL Server 2014 Express with Tools. ما لم تكن بحاجة إلى دعم 64 بت بشكل صريح، يستهلك الإصدار 32 بت ذاكرة أقل عند التشغيل.

  2. تشغيل Configuration Manager SQL Server 2014:

    أ. قم بتوسيع عقدة تكوين الشبكة SQL Server في قائمة الشجرة.

    ب. حدد بروتوكولات ل SQLEXPRESS.

    ج. انقر بزر الماوس الأيمن فوق TCP/IP وحدد تمكين. حدد موافق في مربع الحوار المنبثق.

    د. انقر بزر الماوس الأيمن فوق TCP/IP وحدد خصائص.

    هـ. حدد علامة التبويب IP Addresses.

    و. ابحث عن عقدة IPAll . في حقل منفذ TCP ، أدخل 1433.

    Configure SQL Server Express for TCP/IP

    ز. حدد "OK". حدد موافق في مربع الحوار المنبثق.

    ح. حدد SQL Server Services في قائمة الشجرة.

    ط. انقر بزر الماوس الأيمن فوق SQL Server (SQLEXPRESS) وحدد إعادة التشغيل.

    ي. أغلق Configuration Manager SQL Server 2014.

  3. تشغيل SQL Server 2014 Management Studio والاتصال بمثيل SQL Server Express المحلي الخاص بك:

    1. انقر بزر الماوس الأيمن فوق المثيل الخاص بك في Object Explorer وحدد Properties.

    2. حدد صفحة الأمان .

    3. تأكد من تحديد وضع المصادقة SQL Server Windows.

    4. حدد "OK".

      Configure SQL Server Express authentication

    5. توسيععمليات تسجيل الدخولإلى الأمان> في Object Explorer.

    6. انقر بزر الماوس الأيمن فوق Logins وحدد New Login.

    7. أدخل اسم تسجيل الدخول. حدد SQL Server المصادقة. أدخل كلمة مرور، ثم أدخل كلمة المرور نفسها في تأكيد كلمة المرور. يجب أن تفي كلمة المرور بمتطلبات التعقيد Windows.

    8. حدد "OK".

      Add a new user to SQL Server Express

    9. انقر بزر الماوس الأيمن فوق تسجيل الدخول الجديد وحدد خصائص.

    10. حدد صفحة أدوار الخادم .

    11. حدد خانة الاختيار لدور خادم dbcreator .

    12. حدد "OK".

    13. أغلق SQL Server 2015 Management Studio.

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

يقرأ SQLCONNSTR_MS_TableConnectionString تطبيق Node.js متغير البيئة لسلسلة الاتصال لقاعدة البيانات هذه. يمكنك تعيين هذا المتغير في البيئة الخاصة بك. على سبيل المثال، يمكنك استخدام PowerShell لتعيين متغير البيئة هذا:

$env:SQLCONNSTR_MS_TableConnectionString = "Server=127.0.0.1; Database=mytestdatabase; User Id=azuremobile; Password=T3stPa55word;"

الوصول إلى قاعدة البيانات من خلال اتصال TCP/IP. توفير اسم مستخدم وكلمة مرور للاتصال.

تكوين مشروعك للتطوير المحلي

تقرأ تطبيقات الأجهزة المحمولة ملف JavaScript يسمى azureMobile.js من نظام الملفات المحلي. لا تستخدم هذا الملف لتكوين Mobile Apps SDK في الإنتاج. بدلا من ذلك، استخدم إعدادات التطبيق في مدخل Microsoft Azure.

يجب أن يقوم ملف azureMobile.js بتصدير كائن تكوين. الإعدادات الأكثر شيوعا هي:

  • إعدادات قاعدة البيانات
  • إعدادات التسجيل التشخيصي
  • إعدادات CORS البديلة

يقوم هذا المثال azureMobile.js الملف بتنفيذ إعدادات قاعدة البيانات السابقة:

module.exports = {
    cors: {
        origins: [ 'localhost' ]
    },
    data: {
        provider: 'mssql',
        server: '127.0.0.1',
        database: 'mytestdatabase',
        user: 'azuremobile',
        password: 'T3stPa55word'
    },
    logging: {
        level: 'verbose'
    }
};

نوصي بإضافة azureMobile.js إلى ملف .gitignore (أو عنصر تحكم آخر في التعليمات البرمجية المصدر يتجاهل الملف) لمنع تخزين كلمات المرور في السحابة. قم دائما بتكوين إعدادات الإنتاج في إعدادات التطبيق داخل مدخل Microsoft Azure.

تكوين إعدادات التطبيق لتطبيق الأجهزة المحمولة

تحتوي معظم الإعدادات في ملف azureMobile.js على إعداد تطبيق مكافئ في مدخل Microsoft Azure. استخدم القائمة التالية لتكوين تطبيقك في إعدادات التطبيق:

إعداد التطبيق إعداد azureMobile.js الوصف قيم صحيحة
MS_MobileAppName الاسم اسم التطبيق سلسلة
MS_MobileLoggingLevel logging.level الحد الأدنى لمستوى سجل الرسائل المراد تسجيلها خطأ، تحذير، معلومات، مطول، تصحيح، سخيف
MS_DebugMode تصحيح الأخطاء تمكين وضع تتبع الأخطاء أو تعطيله true, false
MS_TableSchema data.schema اسم المخطط الافتراضي للجداول SQL سلسلة (افتراضي: dbo)
MS_DynamicSchema data.dynamicSchema تمكين وضع تتبع الأخطاء أو تعطيله true, false
MS_DisableVersionHeader الإصدار (تعيين إلى غير معرف) تعطيل رأس X-ZUMO-Server-Version true, false
MS_SkipVersionCheck التحقق من تخطي التخطي تعطيل التحقق من إصدار واجهة برمجة تطبيقات العميل true, false

لتعيين إعداد تطبيق:

  1. سجل الدخول إلى مدخل Azure.
  2. حدد All resources أو App Services، ثم حدد اسم تطبيق الأجهزة المحمولة.
  3. يفتح جزء الإعدادات بشكل افتراضي. إذا لم يكن كذلك، فحدد الإعدادات.
  4. في القائمة GENERAL ، حدد Application settings.
  5. قم بالتمرير إلى قسم إعدادات التطبيق .
  6. إذا كان إعداد التطبيق موجودا بالفعل، فحدد قيمة إعداد التطبيق لتحرير القيمة. إذا لم يكن إعداد التطبيق موجودا، أدخل إعداد التطبيق في المربع مفتاح والقيمة في مربع القيمة .
  7. حدد ⁧⁩حفظ⁧⁩.

يتطلب تغيير معظم إعدادات التطبيق إعادة تشغيل الخدمة.

استخدام قاعدة بيانات SQL كمخزن بيانات الإنتاج

استخدام Azure SQL Database كمخزن بيانات متطابق عبر جميع أنواع تطبيقات Azure App Service. إذا لم تكن قد فعلت ذلك بالفعل، فاتبع هذه الخطوات لإنشاء نهاية خلفية لتطبيقات الأجهزة المحمولة:

  1. سجل الدخول إلى مدخل Azure.

  2. في الجزء العلوي الأيمن من النافذة، حدد الزر >+NEWWeb + Mobile>Mobile App، ثم أدخل اسما لواجهة تطبيقات الأجهزة المحمولة الخلفية.

  3. في المربع مجموعة الموارد ، أدخل نفس اسم تطبيقك.

  4. يتم تحديد خطة App Service الافتراضية. إذا كنت تريد تغيير خطة App Service:

    أ. حدد App Service Plan>+Create New.

    ب. أدخل اسما لخطة App Service الجديدة وحدد موقعا مناسبا.

    ج. حدد مستوى تسعير مناسب للخدمة. حدد عرض الكل لعرض المزيد من خيارات التسعير، مثل مجانيومشترك.

    د. انقر فوق الزر Select

    هـ. مرة أخرى في جزء خطة App Service ، حدد OK.

  5. حدد Create.

قد يستغرق توفير الواجهة الخلفية لتطبيقات الأجهزة المحمولة بضع دقائق. بعد توفير الواجهة الخلفية لتطبيقات الأجهزة المحمولة، يفتح المدخل جزء الإعدادات للواجهة الخلفية لتطبيقات الأجهزة المحمولة.

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

ملاحظة

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

  1. في النهاية الخلفية الجديدة لتطبيقات الأجهزة المحمولة، حدد الإعدادات>Mobile App>Data>+Add.

  2. في جزء Add data connection، حدد SQL Database - Configure required settings>Create a new database. أدخل اسم قاعدة البيانات الجديدة في مربع الاسم .

  3. حدد الخادم. في جزء خادم جديد ، أدخل اسم خادم فريد في مربع اسم الخادم ، وقم بتوفير تسجيل دخول وكلمة مرور مناسبين لمسؤول الخادم. تأكد من تحديد السماح لخدمات azure بالوصول إلى الخادم . حدد "OK".

    Create an Azure SQL database

  4. في جزء قاعدة بيانات جديدة ، حدد موافق.

  5. مرة أخرى في جزء إضافة اتصال البيانات ، حدد سلسلة الاتصال، وأدخل تسجيل الدخول وكلمة المرور التي قدمتها عند إنشاء قاعدة البيانات. إذا كنت تستخدم قاعدة بيانات موجودة، فوفر بيانات اعتماد تسجيل الدخول لقاعدة البيانات هذه. حدد "OK".

  6. مرة أخرى في جزء Add data connection مرة أخرى، حدد OK لإنشاء قاعدة البيانات.

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

طلب المصادقة للوصول إلى الجداول

إذا كنت ترغب في استخدام App Service Authentication مع tables نقطة النهاية، يجب عليك تكوين مصادقة خدمة التطبيقات في مدخل Microsoft Azure أولا. لمزيد من المعلومات، راجع دليل التكوين لموفر الهوية الذي تنوي استخدامه:

يحتوي كل جدول على خاصية وصول يمكنك استخدامها للتحكم في الوصول إلى الجدول. يعرض النموذج التالي جدولا محددا بشكل ثابت مع المصادقة المطلوبة.

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Define the columns within the table.
table.columns = {
    "text": "string",
    "complete": "boolean"
};

// Turn off the dynamic schema.
table.dynamicSchema = false;

// Require authentication to access the table.
table.access = 'authenticated';

module.exports = table;

يمكن أن تأخذ خاصية الوصول إحدى القيم الثلاث:

  • يشير مجهول إلى أنه يسمح لتطبيق العميل بقراءة البيانات دون مصادقة.
  • تشير المصادقة إلى أن تطبيق العميل يجب أن يرسل رمز مصادقة صالحا مع الطلب.
  • يشير تعطيل إلى أن هذا الجدول معطل حاليا.

إذا كانت خاصية الوصول غير معرفة، يسمح بالوصول غير المصادق عليه.

استخدام مطالبات المصادقة مع الجداول

يمكنك إعداد مطالبات مختلفة مطلوبة عند إعداد المصادقة. لا تتوفر هذه المطالبات عادة من خلال context.user الكائن. ومع ذلك، يمكنك استردادها باستخدام context.user.getIdentity() الأسلوب . يقوم getIdentity() الأسلوب بإرجاع وعد يحل إلى كائن. يتم مفتاح الكائن بواسطة أسلوب المصادقة (facebookأو googleأو twittermicrosoftaccount).aad

على سبيل المثال، إذا قمت بإعداد مصادقة حساب Microsoft وطلب مطالبة عناوين البريد الإلكتروني، يمكنك إضافة عنوان البريد الإلكتروني إلى السجل باستخدام وحدة تحكم الجدول التالية:

var azureMobileApps = require('azure-mobile-apps');

// Create a new table definition.
var table = azureMobileApps.table();

table.columns = {
    "emailAddress": "string",
    "text": "string",
    "complete": "boolean"
};
table.dynamicSchema = false;
table.access = 'authenticated';

/**
* Limit the context query to those records with the authenticated user email address
* @param {Context} context the operation context
* @returns {Promise} context execution Promise
*/
function queryContextForEmail(context) {
    return context.user.getIdentity().then((data) => {
        context.query.where({ emailAddress: data.microsoftaccount.claims.emailaddress });
        return context.execute();
    });
}

/**
* Adds the email address from the claims to the context item - used for
* insert operations
* @param {Context} context the operation context
* @returns {Promise} context execution Promise
*/
function addEmailToContext(context) {
    return context.user.getIdentity().then((data) => {
        context.item.emailAddress = data.microsoftaccount.claims.emailaddress;
        return context.execute();
    });
}

// Configure specific code when the client does a request.
// READ: only return records that belong to the authenticated user.
table.read(queryContextForEmail);

// CREATE: add or overwrite the userId based on the authenticated user.
table.insert(addEmailToContext);

// UPDATE: only allow updating of records that belong to the authenticated user.
table.update(queryContextForEmail);

// DELETE: only allow deletion of records that belong to the authenticated user.
table.delete(queryContextForEmail);

module.exports = table;

لمعرفة المطالبات المتوفرة، استخدم مستعرض ويب لعرض /.auth/me نقطة نهاية موقعك.

تعطيل الوصول إلى عمليات جدول معينة

بالإضافة إلى الظهور على الجدول، يمكن استخدام خاصية الوصول للتحكم في العمليات الفردية. هناك أربع عمليات:

  • read هي عملية RESTful GET على الجدول.
  • insert هي عملية RESTful POST على الجدول.
  • update هي عملية RESTful PATCH على الجدول.
  • delete هي عملية RESTful DELETE على الجدول.

على سبيل المثال، قد تحتاج إلى توفير جدول للقراءة فقط غير مصادق عليه:

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Read-only table. Only allow READ operations.
table.read.access = 'anonymous';
table.insert.access = 'disabled';
table.update.access = 'disabled';
table.delete.access = 'disabled';

module.exports = table;

ضبط الاستعلام المستخدم مع عمليات الجدول

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

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Define a static schema for the table.
table.columns = {
    "userId": "string",
    "text": "string",
    "complete": "boolean"
};
table.dynamicSchema = false;

// Require authentication for this table.
table.access = 'authenticated';

// Ensure that only records for the authenticated user are retrieved.
table.read(function (context) {
    context.query.where({ userId: context.user.id });
    return context.execute();
});

// When adding records, add or overwrite the userId with the authenticated user.
table.insert(function (context) {
    context.item.userId = context.user.id;
    return context.execute();
});

module.exports = table;

العمليات التي تقوم عادة بتشغيل استعلام لها خاصية استعلام يمكنك ضبطها باستخدام عبارة where . خاصية الاستعلام هي كائن QueryJS يستخدم لتحويل استعلام OData إلى شيء يمكن للنهاية الخلفية للبيانات معالجته. بالنسبة لحالات المساواة البسيطة (مثل الحالات السابقة)، يمكنك استخدام خريطة. يمكنك أيضا إضافة عبارات SQL معينة:

context.query.where('myfield eq ?', 'value');

تكوين حذف مبدئي على جدول

لا يؤدي الحذف المبدئي إلى حذف السجلات فعليا. بدلا من ذلك، يضع علامة عليها على أنها محذوفة داخل قاعدة البيانات عن طريق تعيين العمود المحذوف إلى صحيح. يزيل SDK لتطبيقات الأجهزة المحمولة تلقائيا السجلات المحذوفة مبدئيا من النتائج ما لم يستخدم IncludeDeleted()SDK عميل الأجهزة المحمولة . لتكوين جدول لحذف مبدئي، قم بتعيين الخاصية softDelete في ملف تعريف الجدول:

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Define the columns within the table.
table.columns = {
    "text": "string",
    "complete": "boolean"
};

// Turn off the dynamic schema.
table.dynamicSchema = false;

// Turn on soft delete.
table.softDelete = true;

// Require authentication to access the table.
table.access = 'authenticated';

module.exports = table;

يجب إنشاء آلية لحذف السجلات: تطبيق عميل أو WebJob أو دالة Azure أو واجهة برمجة تطبيقات مخصصة.

إنشاء قاعدة البيانات باستخدام البيانات

عند إنشاء تطبيق جديد، قد تحتاج إلى إنشاء جدول بالبيانات. يمكنك القيام بذلك ضمن ملف JavaScript لتعريف الجدول كما يلي:

var azureMobileApps = require('azure-mobile-apps');

var table = azureMobileApps.table();

// Define the columns within the table.
table.columns = {
    "text": "string",
    "complete": "boolean"
};
table.seed = [
    { text: 'Example 1', complete: false },
    { text: 'Example 2', complete: true }
];

// Turn off the dynamic schema.
table.dynamicSchema = false;

// Require authentication to access the table.
table.access = 'authenticated';

module.exports = table;

لا يحدث إدخال البيانات إلا عندما تستخدم Mobile Apps SDK لإنشاء الجدول. إذا كان الجدول موجودا بالفعل في قاعدة البيانات، فلن يتم إدخال أي بيانات في الجدول. إذا كان المخطط الديناميكي قيد التشغيل، يتم استنتاج المخطط من البيانات الأولية.

نوصي باستدعاء tables.initialize() الأسلوب بشكل صريح لإنشاء الجدول عند بدء تشغيل الخدمة.

تمكين دعم Swagger

تأتي تطبيقات الأجهزة المحمولة مزودة بدعم Swagger المضمن. لتمكين دعم Swagger، قم أولا بتثبيت swagger-ui كتبعية:

npm install --save swagger-ui

يمكنك بعد ذلك تمكين دعم Swagger في منشئ تطبيقات الأجهزة المحمولة:

var mobile = azureMobileApps({ swagger: true });

ربما تريد فقط تمكين دعم Swagger في إصدارات التطوير. يمكنك القيام بذلك باستخدام NODE_ENV إعداد التطبيق:

var mobile = azureMobileApps({ swagger: process.env.NODE_ENV !== 'production' });

swagger توجد نقطة النهاية في http:// yoursite.azurewebsites.net/swagger. يمكنك الوصول إلى واجهة مستخدم Swagger عبر /swagger/ui نقطة النهاية. إذا اخترت طلب المصادقة عبر التطبيق بأكمله، ينتج عن Swagger خطأ. للحصول على أفضل النتائج، اختر السماح بالطلبات غير المصادق عليها في إعدادات Azure App Service Authentication/Authorization، ثم التحكم في المصادقة باستخدام الخاصية table.access .

يمكنك أيضا إضافة خيار Swagger إلى ملف azureMobile.js إذا كنت تريد فقط دعم Swagger للتطوير محليا.

الإعلامات

تتكامل تطبيقات الأجهزة المحمولة مع Azure Notification Hubs حتى تتمكن من إرسال إعلامات الدفع المستهدفة إلى ملايين الأجهزة عبر جميع الأنظمة الأساسية الرئيسية. باستخدام مراكز الإعلامات، يمكنك إرسال إعلامات مؤقتة إلى أجهزة iOS وAndroid Windows. لمعرفة المزيد حول كل ما يمكنك القيام به باستخدام مراكز الإعلامات، راجع نظرة عامة على مراكز الإعلامات.

إرسال الإشعارات الفورية

توضح التعليمات البرمجية push التالية كيفية استخدام الكائن لإرسال إعلام دفع البث إلى أجهزة iOS المسجلة:

// Create an APNS payload.
var payload = '{"aps": {"alert": "This is an APNS payload."}}';

// Only do the push if configured.
if (context.push) {
    // Send a push notification by using APNS.
    context.push.apns.send(null, payload, function (error) {
        if (error) {
            // Do something or log the error.
        }
    });
}

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

// Define the template payload.
var payload = '{"messageParam": "This is a template payload."}';

// Only do the push if configured.
if (context.push) {
    // Send a template notification.
    context.push.send(null, payload, function (error) {
        if (error) {
            // Do something or log the error.
        }
    });
}

إرسال إعلامات الدفع إلى مستخدم مصادق عليه باستخدام العلامات

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

// Only do the push if configured.
if (context.push) {
    // Send a notification to the current user.
    context.push.send(context.user.id, payload, function (error) {
        if (error) {
            // Do something or log the error.
        }
    });
}

عند التسجيل للحصول على الإعلامات المنبثقة من عميل مصادق عليه، تأكد من اكتمال المصادقة قبل محاولة التسجيل.

واجهات برمجة التطبيقات المخصصة

تعريف واجهة برمجة تطبيقات مخصصة

بالإضافة إلى واجهة برمجة تطبيقات الوصول إلى البيانات عبر /tables نقطة النهاية، يمكن لتطبيقات الأجهزة المحمولة توفير تغطية مخصصة لواجهة برمجة التطبيقات. يتم تعريف واجهات برمجة التطبيقات المخصصة بطريقة مشابهة لتعريفات الجدول ويمكنها الوصول إلى جميع التسهيلات نفسها، بما في ذلك المصادقة.

إذا كنت ترغب في استخدام App Service Authentication مع واجهة برمجة تطبيقات مخصصة، يجب عليك تكوين App Service Authentication في مدخل Microsoft Azure أولا. لمزيد من المعلومات، راجع دليل التكوين لموفر الهوية الذي تنوي استخدامه:

يتم تعريف واجهات برمجة التطبيقات المخصصة بنفس طريقة تعريف واجهة برمجة تطبيقات الجداول:

  1. api إنشاء دليل.
  2. إنشاء ملف JavaScript لتعريف واجهة برمجة التطبيقات في api الدليل.
  3. استخدم أسلوب الاستيراد لاستيراد api الدليل.

فيما يلي تعريف واجهة برمجة التطبيقات النموذجي استنادا إلى نموذج التطبيق الأساسي الذي استخدمناه سابقا:

var express = require('express'),
    azureMobileApps = require('azure-mobile-apps');

var app = express(),
    mobile = azureMobileApps();

// Import the custom API.
mobile.api.import('./api');

// Add the Mobile API so it is accessible as a Web API.
app.use(mobile);

// Start listening on HTTP
app.listen(process.env.PORT || 3000);

لنأخذ مثالا على واجهة برمجة التطبيقات التي ترجع تاريخ الخادم باستخدام Date.now() الأسلوب . فيما يلي ملف api/date.js:

var api = {
    get: function (req, res, next) {
        var date = { currentTime: Date.now() };
        res.status(200).type('application/json').send(date);
    });
};

module.exports = api;

كل معلمة هي واحدة من أفعال RESTful القياسية: GET أو POST أو PATCH أو DELETE. الأسلوب هو دالة البرنامج الوسيط ExpressJS القياسية التي ترسل الإخراج المطلوب.

طلب المصادقة للوصول إلى واجهة برمجة تطبيقات مخصصة

تنفذ SDK لتطبيقات الأجهزة المحمولة المصادقة بنفس الطريقة لكل من tables نقطة النهاية وواجهات برمجة التطبيقات المخصصة. لإضافة مصادقة إلى واجهة برمجة التطبيقات التي تم تطويرها في القسم السابق، أضف خاصية access :

var api = {
    get: function (req, res, next) {
        var date = { currentTime: Date.now() };
        res.status(200).type('application/json').send(date);
    });
};
// All methods must be authenticated.
api.access = 'authenticated';

module.exports = api;

يمكنك أيضا تحديد المصادقة على عمليات معينة:

var api = {
    get: function (req, res, next) {
        var date = { currentTime: Date.now() };
        res.status(200).type('application/json').send(date);
    }
};
// The GET methods must be authenticated.
api.get.access = 'authenticated';

module.exports = api;

يجب استخدام نفس الرمز المميز المستخدم لنقطة tables النهاية لواجهات برمجة التطبيقات المخصصة التي تتطلب المصادقة.

معالجة عمليات تحميل الملفات الكبيرة

يستخدم SDK لتطبيقات الأجهزة المحمولة البرنامج الوسيط لتحليل النص الأساسي لقبول محتوى النص الأساسي وفك ترميزه في عملية الإرسال. يمكنك تكوين محلل النص الأساسي مسبقا لقبول تحميلات الملفات الأكبر:

var express = require('express'),
    bodyParser = require('body-parser'),
    azureMobileApps = require('azure-mobile-apps');

var app = express(),
    mobile = azureMobileApps();

// Set up large body content handling.
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

// Import the custom API.
mobile.api.import('./api');

// Add the Mobile API so it is accessible as a Web API.
app.use(mobile);

// Start listening on HTTP.
app.listen(process.env.PORT || 3000);

يتم ترميز الملف base-64 قبل الإرسال. يزيد هذا الترميز من حجم التحميل الفعلي (والحجم الذي يجب حسابه).

تنفيذ عبارات SQL المخصصة

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

var api = {
    get: function (request, response, next) {
        // Check for parameters. If not there, pass on to a later API call.
        if (typeof request.params.completed === 'undefined')
            return next();

        // Define the query. Anything that the mssql
        // driver can handle is allowed.
        var query = {
            sql: 'UPDATE TodoItem SET complete=@completed',
            parameters: [{
                completed: request.params.completed
            }]
        };

        // Execute the query. The context for Mobile Apps is available through
        // request.azureMobile. The data object contains the configured data provider.
        request.azureMobile.data.execute(query)
        .then(function (results) {
            response.json(results);
        });
    }
};

api.get.access = 'authenticated';
module.exports = api;

تصحيح الأخطاء

تصحيح أخطاء تطبيقات الأجهزة المحمولة وتشخيصها واستكشاف الأخطاء وإصلاحها

توفر Azure App Service العديد من تقنيات تصحيح الأخطاء واستكشاف الأخطاء وإصلاحها للتطبيقات Node.js. لبدء استكشاف أخطاء Node.js Mobile Apps وإصلاحها، راجع المقالات التالية:

Node.js التطبيقات لديها حق الوصول إلى مجموعة واسعة من أدوات سجل التشخيص. داخليا، تستخدم تطبيقات الأجهزة المحمولة Node.js SDK Winston للتسجيل التشخيصي. يتم تمكين التسجيل تلقائيا عند تمكين وضع التصحيح أو تعيين MS_DebugMode إعداد التطبيق إلى صحيح في مدخل Microsoft Azure. تظهر السجلات التي تم إنشاؤها في سجلات التشخيص في مدخل Microsoft Azure.