Azure Mobile Apps için Node.js SDK'sını kullanma

Bu makalede, Azure Mobile Apps için NodeJS arka ucuyla nasıl çalışıldığını gösteren ayrıntılı bilgiler ve örnekler sağlanmaktadır.

Giriş

Azure Mobile Apps, bir web uygulamasına mobil için iyileştirilmiş veri erişimi Web API'sini ekleme özelliği sağlar. Azure Mobile Apps SDK'sı ASP.NET Framework ve Node.js web uygulamaları için sağlanır. SDK aşağıdaki işlemleri sağlar:

  • Veri erişimi için tablo işlemleri (okuma, ekleme, güncelleştirme, silme)
  • Özel API işlemleri

Her iki işlem de Azure Uygulaması Hizmeti'nin izin verdiği tüm kimlik sağlayıcıları arasında kimlik doğrulaması sağlar. Bu sağlayıcılar Facebook, Twitter, Google ve Microsoft gibi sosyal kimlik sağlayıcılarını ve kurumsal kimlik için Microsoft Entra Id'yi içerir.

Desteklenen platformlar

Azure Mobile Apps Node.js SDK'sı Node 6.x ve üzerini destekler ve Node 12.x'e kadar test edilmiştir. Node'un diğer sürümleri çalışabilir ancak desteklenmez.

Azure Mobile Apps Node.js SDK'sı iki veritabanı sürücüsünü destekler:

  • node-mssql sürücüsü Azure SQL Veritabanı ve yerel SQL Server örneklerini destekler.
  • sqlite3 sürücüsü yalnızca tek bir örnekteki SQLite veritabanlarını destekler.

Komut satırını kullanarak temel bir Düğüm arka ucu oluşturma

Her Azure Mobile Apps Node.js arka ucu Express uygulaması olarak başlar. Express, Node.js için kullanılabilen en popüler web hizmeti çerçevesidir. Aşağıdaki gibi temel bir Express uygulaması oluşturabilirsiniz:

  1. Bir komutta veya PowerShell penceresinde projeniz için bir dizin oluşturun:

    $ mkdir basicapp
    
  2. Paket yapısını başlatmak için komutunu çalıştırın npm init :

    $ cd basicapp
    $ npm init
    

    Komut, npm init projeyi başlatmak için bir dizi soru sorar. Örnek çıktıya bakın:

    The npm init output

  3. express npm deposundan ve azure-mobile-apps kitaplıklarını yükleyin:

    npm install --save express azure-mobile-apps
    
  4. Temel mobil sunucuyu uygulamak için bir app.js dosya oluşturun:

    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);
    

Bu uygulama, dinamik bir şema kullanarak temel alınan sql veri deposuna kimliği doğrulanmamış erişim sağlayan tek uç nokta (/tables/TodoItem) ile mobil olarak iyileştirilmiş bir Web API'sini oluşturur. İstemci kitaplığı hızlı başlangıçlarını takip için uygundur:

Bu temel uygulamanın kodunu GitHub'daki örnekler alanında bulabilirsiniz.

Uygulamanız için giriş sayfasını etkinleştirme

Birçok uygulama, web ve mobil uygulamaların birleşimidir. Express çerçevesini kullanarak iki model birleştirebilirsiniz. Ancak bazen yalnızca bir mobil arabirim uygulamak isteyebilirsiniz. Uygulama hizmetinin çalışır durumda olduğundan emin olmak için bir giriş sayfası sağlamak yararlı olur. Kendi giriş sayfanızı sağlayabilir veya geçici bir giriş sayfasını etkinleştirebilirsiniz. Geçici bir giriş sayfasını etkinleştirmek için aşağıdaki kodu kullanarak Azure Mobile Apps örneği oluşturun:

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

Bu seçeneğin yalnızca yerel olarak geliştirme sırasında kullanılabilir olmasını istiyorsanız, bu ayarı azureMobile.js yapılandırma dosyasına ekleyebilirsiniz:

module.exports = {
    homePage: true,
};

AzureMobile.js dosyasına gerektiği gibi başka ayarlar ekleyebilirsiniz.

Tablo işlemleri

azure-mobile-apps Node.js Sunucu SDK'sı, web API'si olarak Azure SQL Veritabanı depolanan veri tablolarını kullanıma sunmak için mekanizmalar sağlar. Beş işlem sağlar:

Operation Açıklama
GET /tables/tablename Tablodaki tüm kayıtları alın.
GET /tables/tablename/:id Tabloda belirli bir kaydı alma.
POST /tables/tablename Tabloda bir kayıt oluşturun.
PATCH /tables/tablename/:id Tablodaki bir kaydı güncelleştirin.
DELETE /tables/tablename/:id Tablodaki bir kaydı silin.

Bu Web API'si OData v3'i destekler ve tablo şemasını çevrimdışı veri eşitlemeyi destekleyecek şekilde genişletir.

Dinamik şema kullanarak tabloları tanımlama

Tabloyu kullanabilmeniz için önce tanımlamanız gerekir. Statik bir şema kullanarak (şemadaki sütunları tanımladığınız) veya dinamik olarak (SDK'nın gelen isteklere göre şemayı denetlediği) tabloları tanımlayabilirsiniz. Ayrıca tanıma JavaScript kodu ekleyerek Web API'sinin belirli yönlerini denetleyebilirsiniz.

En iyi yöntem olarak, her tabloyu dizindeki bir JavaScript dosyasında tables tanımlamanız ve ardından tabloları içeri aktarmak için yöntemini kullanmanız tables.import() gerekir. Temel uygulama örneğini genişleterek app.js dosyasını ayarlayabilirsiniz:

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);
});

Tabloyu ./tables/TodoItem.js içinde tanımlayın:

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

var table = azureMobileApps.table();

// Additional configuration for the table goes here.

module.exports = table;

Tablolar varsayılan olarak dinamik şema kullanır.

Statik şema kullanarak tabloları tanımlama

Web API'sini kullanarak kullanıma sunma sütunlarını açıkça tanımlayabilirsiniz. azure-mobile-apps Node.js SDK'sı, çevrimdışı veri eşitlemesi için gereken ek sütunları otomatik olarak sağladığınız listeye ekler. Örneğin, hızlı başlangıç istemci uygulamaları iki sütunlu bir tablo gerektirir: text (dize) ve complete (Boole). Tablo, tablo tanımı JavaScript dosyasında (dizinde tables bulunur) aşağıdaki gibi tanımlanabilir:

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;

Tabloları statik olarak tanımlarsanız, başlangıçta veritabanı şemasını oluşturmak için yöntemini de çağırmanız tables.initialize() gerekir. yöntemi, tables.initialize() web hizmetinin veritabanı başlatılmadan önce isteklere hizmet vermemesi için bir promise döndürür.

SQL Server Express'i yerel makinenizde geliştirme veri deposu olarak kullanma

Azure Mobile Apps Node.js SDK'sı, verileri kullanıma hazır olarak sunmak için üç seçenek sunar:

  • Kalıcı olmayan bir örnek depo sağlamak için bellek sürücüsünü kullanın.
  • Geliştirme için bir SQL Server Express veri deposu sağlamak için mssql sürücüsünü kullanın.
  • Üretim için bir Azure SQL Veritabanı veri deposu sağlamak için mssql sürücüsünü kullanın.

Azure Mobile Apps Node.js SDK'sı, hem SQL Server Express hem de SQL Veritabanı bağlantı kurmak ve kullanmak için mssql Node.js paketini kullanır. Bu paket, SQL Server Express örneğinizde TCP bağlantılarını etkinleştirmenizi gerektirir.

Bahşiş

Bellek sürücüsü test için eksiksiz bir olanak kümesi sağlamaz. Arka ucunuzu yerel olarak test etmek istiyorsanız, SQL Server Express veri deposu ve mssql sürücüsünün kullanılmasını öneririz.

  1. Microsoft SQL Server 2019 Developer'ı indirin ve yükleyin.

  2. Configuration Manager'ı çalıştırın:

    • Ağaç menüsünde SQL Server Ağ Yapılandırması düğümünü genişletin.
    • Örnek adı için Protokoller'i seçin.
    • TCP/IP'ye sağ tıklayın ve Etkinleştir'i seçin. Açılır iletişim kutusunda Tamam'ı seçin.
    • Ağaç menüsünde SQL Server Hizmetleri'ni seçin.
    • SQL Server'a (örnek-ad) sağ tıklayın ve Yeniden Başlat'ı seçin.
    • Configuration Manager'ı kapatın.

Ayrıca Azure Mobile Apps'in veritabanına bağlanmak için kullanabileceği bir kullanıcı adı ve parola oluşturmanız gerekir. Oluşturduğunuz kullanıcının sunucu rolüne dbcreator sahip olduğundan emin olun. Kullanıcıları yapılandırma hakkında daha fazla bilgi için SQL Server belgelerine bakın

Seçtiğiniz kullanıcı adını ve parolayı kaydettiğinizden emin olun. Veritabanı gereksinimlerinize bağlı olarak daha fazla sunucu rolü veya izin atamanız gerekebilir.

Node.js uygulaması, bu veritabanı için bağlantı dizesi ortam değişkenini okurSQLCONNSTR_MS_TableConnectionString. Bu değişkeni ortamınızda ayarlayabilirsiniz. Örneğin, bu ortam değişkenini ayarlamak için PowerShell'i kullanabilirsiniz:

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

Veritabanına TCP/IP bağlantısı üzerinden erişin. Bağlantı için bir kullanıcı adı ve parola girin.

Projenizi yerel geliştirme için yapılandırma

Azure Mobile Apps, yerel dosya sisteminden adlı azureMobile.js bir JavaScript dosyasını okur. Üretim ortamında Azure Mobile Apps SDK'sını yapılandırmak için bu dosyayı kullanmayın. Bunun yerine Azure portalında Uygulama ayarlarını kullanın.

azureMobile.js dosyası bir yapılandırma nesnesini dışarı aktarmalıdır. En yaygın ayarlar şunlardır:

  • Veritabanı ayarları
  • Tanılama günlüğü ayarları
  • Alternatif CORS ayarları

Bu örnek azureMobile.js dosyası önceki veritabanı ayarlarını uygular:

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

Parolaların bulutta depolanmasını önlemek için dosyanıza (veya başka bir kaynak kodu denetimi yoksay dosyası) eklemenizi azureMobile.js.gitignore öneririz.

Mobil uygulamanız için uygulama ayarlarını yapılandırma

Dosyadaki ayarların azureMobile.js çoğu Azure portalında eşdeğer bir uygulama ayarına sahiptir. Uygulamanızı Uygulama ayarlarında yapılandırmak için aşağıdaki listeyi kullanın:

Uygulama ayarı azureMobile.js ayarı Açıklama Geçerli değerler
MS_MobileAppName name Uygulamanın adı Dize
MS_MobileLoggingLevel logging.level Günlüğe kaydedilecek iletilerin en düşük günlük düzeyi hata, uyarı, bilgi, ayrıntılı, hata ayıklama, aptalca
MS_DebugMode hata ayıkla Hata ayıklama modunu etkinleştirir veya devre dışı bırakır true, false
MS_TableSchema data.schema SQL tabloları için varsayılan şema adı dize (varsayılan: dbo)
MS_DynamicSchema data.dynamicSchema Hata ayıklama modunu etkinleştirir veya devre dışı bırakır true, false
MS_DisableVersionHeader sürüm (tanımsız olarak ayarlanır) X-ZUMO-Server-Version üst bilgisini devre dışı bırakır true, false
MS_SkipVersionCheck skipversioncheck İstemci API'sinin sürüm denetimini devre dışı bırakır true, false

Çoğu uygulama ayarlarını değiştirmek için hizmetin yeniden başlatılması gerekir.

Azure SQL'i üretim veri deponuz olarak kullanma

veri deposu olarak Azure SQL Veritabanı kullanmak, tüm Azure Uygulaması Hizmeti uygulama türlerinde aynıdır. Henüz yapmadıysanız, Azure Uygulaması Hizmeti arka ucu oluşturmak için bu adımları izleyin. Bir Azure SQL örneği oluşturun, ardından uygulama ayarını SQLCONNSTR_MS_TableConnectionString kullanmak istediğiniz Azure SQL örneğinin bağlantı dizesi olarak ayarlayın. Arka ucunuzu çalıştıran Azure Uygulaması Hizmetinin Azure SQL örneğiniz ile iletişim kuraadığından emin olun.

Tablolara erişim için kimlik doğrulaması gerektir

Uç noktayla tables App Service Kimlik Doğrulaması kullanmak istiyorsanız, önce Azure portalında App Service Kimlik Doğrulaması'nı yapılandırmanız gerekir. Daha fazla bilgi için, kullanmayı planladığınız kimlik sağlayıcısının yapılandırma kılavuzuna bakın:

Her tablonun, tabloya erişimi denetlemek için kullanabileceğiniz bir erişim özelliği vardır. Aşağıdaki örnekte kimlik doğrulamasının gerekli olduğu statik olarak tanımlanmış bir tablo gösterilmektedir.

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;

Access özelliği üç değerden birini alabilir:

  • anonim , istemci uygulamasının kimlik doğrulaması olmadan verileri okumasına izin verildiğini gösterir.
  • authenticated , istemci uygulamasının istekle birlikte geçerli bir kimlik doğrulama belirteci göndermesi gerektiğini gösterir.
  • disabled , bu tablonun şu anda devre dışı olduğunu gösterir.

Erişim özelliği tanımlanmamışsa, kimliği doğrulanmamış erişime izin verilir.

Tablolarınızla kimlik doğrulama taleplerini kullanma

Kimlik doğrulaması ayarlandığında istenen çeşitli talepleri ayarlayabilirsiniz. Bu talepler normalde nesnesi aracılığıyla context.user kullanılamaz. Ancak, yöntemini kullanarak context.user.getIdentity() bunları alabilirsiniz. yöntemi, getIdentity() bir nesneye çözümleyen bir söz döndürür. Nesnesi, kimlik doğrulama yöntemi (facebook, google, twitter, microsoftaccountveya aad) tarafından anahtarlanır.

Dekont

Microsoft Entra Id aracılığıyla Microsoft kimlik doğrulaması kullanılıyorsa, kimlik doğrulama yöntemi aaddeğildir microsoftaccount.

Örneğin, Microsoft Entra kimlik doğrulamasını ayarlar ve e-posta adresleri talebini isterseniz, e-posta adresini aşağıdaki tablo denetleyicisiyle kayda ekleyebilirsiniz:

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.aad.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.aad.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;

Hangi taleplerin kullanılabilir olduğunu görmek için bir web tarayıcısı kullanarak sitenizin /.auth/me uç noktasını görüntüleyin.

Belirli tablo işlemlerine erişimi devre dışı bırakma

Tabloda görünmeye ek olarak, access özelliği tek tek işlemleri denetlemek için kullanılabilir. Dört işlem vardır:

  • read , tablodaki RESTful GET işlemidir.
  • insert , tablodaki RESTful POST işlemidir.
  • update , tablodaki RESTful PATCH işlemidir.
  • delete , tablodaki RESTful DELETE işlemidir.

Örneğin, salt okunur kimliği doğrulanmamış bir tablo sağlamak isteyebilirsiniz:

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;

Tablo işlemleriyle kullanılan sorguyu ayarlama

Tablo işlemleri için yaygın bir gereksinim, verilerin kısıtlı bir görünümünü sağlamaktır. Örneğin, kimliği doğrulanmış kullanıcı kimliğiyle etiketlenmiş bir tablo sağlayabilirsiniz; böylece yalnızca kendi kayıtlarınızı okuyabilir veya güncelleştirebilirsiniz. Aşağıdaki tablo tanımı bu işlevi sağlar:

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;

Normalde sorgu çalıştıran işlemler, yan tümcesi kullanarak ayarlayabileceğiniz bir where sorgu özelliğine sahiptir. Sorgu özelliği, OData sorgusunu veri arka ucunun işleyebileceği bir şeye dönüştürmek için kullanılan bir QueryJS nesnesidir. Basit eşitlik durumları için (yukarıdaki gibi) bir harita kullanabilirsiniz. Ayrıca belirli SQL yan tümceleri de ekleyebilirsiniz:

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

Tabloda geçici silmeyi yapılandırma

Geçici silme aslında kayıtları silmez. Bunun yerine, silinen sütunu true olarak ayarlayarak bunları veritabanında silinmiş olarak işaretler. Mobil İstemci SDK'sı kullanmadığı includeDeleted()sürece Azure Mobile Apps SDK'sı geçici olarak silinen kayıtları sonuçlardan otomatik olarak kaldırır. Geçici silme için bir tablo yapılandırmak için, tablo tanımı dosyasında özelliğini ayarlayın 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;

İstemci uygulaması, Web İşi, Azure İşlevi veya özel API gibi kayıtları kalıcı olarak silmek için bir mekanizma oluşturun.

Veritabanınızı verilerle tohumla oluşturma

Yeni bir uygulama oluştururken veri içeren bir tablo görmek isteyebilirsiniz. Tablo tanımı JavaScript dosyasındaki verileri aşağıdaki gibi görebilirsiniz:

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;

Verilerin tohumlanması yalnızca tabloyu oluşturmak için Azure Mobile Apps SDK'sını kullandığınızda gerçekleşir. Tablo veritabanında zaten varsa, tabloya veri eklenmez. Dinamik şema açıksa, şema, dağıtılan verilerden çıkarılır.

Hizmet çalışmaya başladığında tabloyu oluşturmak için yöntemini açıkça çağırmanızı tables.initialize() öneririz.

Swagger desteğini etkinleştirme

Azure Mobile Apps yerleşik Swagger desteğiyle birlikte gelir. Swagger desteğini etkinleştirmek için önce bağımlılık olarak swagger-ui yükleyin:

npm install --save swagger-ui

Ardından Azure Mobile Apps oluşturucusunda Swagger desteğini etkinleştirebilirsiniz:

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

Muhtemelen yalnızca geliştirme sürümlerinde Swagger desteğini etkinleştirmek istiyorsunuz. Uygulama ayarını kullanarak NODE_ENV geliştirme aşamasında Swagger desteğini etkinleştirebilirsiniz:

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

swagger nokta http:// yoursite.azurewebsites.net/swagger konumunda bulunur. Swagger kullanıcı arabirimine uç nokta üzerinden /swagger/ui erişebilirsiniz. Tüm uygulamanızda kimlik doğrulaması gerektirmeyi seçerseniz, Swagger bir hata oluşturur. En iyi sonuçları elde etmek için, Azure Uygulaması Hizmet Kimlik Doğrulaması/Yetkilendirme ayarlarında kimliği doğrulanmamış isteklere izin vermeyi ve ardından özelliğini kullanarak kimlik doğrulamasını denetlemeyi table.access seçin.

Ayrıca, yalnızca yerel olarak geliştirme için Swagger desteği istiyorsanız dosyanıza azureMobile.js Swagger seçeneğini de ekleyebilirsiniz.

Özel API'lar

Azure Mobile Apps, uç nokta üzerinden Veri Erişim API'sine /tables ek olarak özel API kapsamı sağlayabilir. Özel API'ler tablo tanımlarına benzer şekilde tanımlanır ve kimlik doğrulaması da dahil olmak üzere tüm aynı tesislere erişebilir.

Özel API tanımlama

Özel API'ler Tablolar API'sine çok benzer şekilde tanımlanır:

  1. Bir api dizin oluşturun.
  2. Dizininde api bir API tanımı JavaScript dosyası oluşturun.
  3. Dizini içeri aktarmak için içeri aktarma api yöntemini kullanın.

Aşağıda, daha önce kullandığımız temel uygulama örneğini temel alan prototip API tanımı verilmiştir:

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);

yöntemini kullanarak Date.now() sunucu tarihini döndüren örnek bir API alalım. Dosya şu şekildedir 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;

Her parametre standart RESTful fiillerinden biridir: GET, POST, PATCH veya DELETE. yöntemi, gerekli çıkışı gönderen standart bir ExpressJS ara yazılım işlevidir.

Özel API'ye erişim için kimlik doğrulaması gerektirme

Azure Mobile Apps SDK'sı, kimlik doğrulamasını hem uç nokta hem de tables özel API'ler için aynı şekilde uygular. Önceki bölümde geliştirilen API'ye kimlik doğrulaması eklemek için bir access özellik ekleyin:

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;

Ayrıca belirli işlemlerde kimlik doğrulaması belirtebilirsiniz:

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;

Kimlik doğrulaması gerektiren özel API'ler için uç nokta için tables kullanılan aynı belirteç kullanılmalıdır.

Büyük dosya yüklemelerini işleme

Azure Mobile Apps SDK'sı , gönderiminizdeki gövde içeriğini kabul etmek ve kodunu çözmek için gövde ayrıştırıcı ara yazılımını kullanır. Daha büyük dosya yüklemelerini kabul etmek için body-ayrıştırıcısını önceden yapılandırabilirsiniz:

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);

Dosya, iletimden önce base-64 kodlanmış. Bu kodlama gerçek karşıya yükleme boyutunu (ve hesaba katın) boyutunu artırır.

Özel SQL deyimlerini yürütme

Azure Mobile Apps SDK'sı, istek nesnesi aracılığıyla bağlamın tamamına erişim sağlar. Parametreli SQL deyimlerini tanımlı veri sağlayıcısına kolayca yürütebilirsiniz:

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 Azure 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;

Hata ayıklama

Azure Mobile Apps'te hata ayıklama, tanılama ve sorun giderme

Azure Uygulaması Hizmeti, Node.js uygulamaları için çeşitli hata ayıklama ve sorun giderme teknikleri sağlar. Node.js Azure Mobile Apps arka ucunuzla ilgili sorunları gidermeye başlamak için aşağıdaki makalelere bakın:

Node.js uygulamalarının çok çeşitli tanılama günlüğü araçlarına erişimi vardır. Azure Mobile Apps Node.js SDK'sı dahili olarak tanılama günlüğü için [Winston] kullanır. Azure portalında hata ayıklama modunu etkinleştirdiğinizde veya uygulama ayarını true olarak ayarladığınızda MS_DebugMode günlük otomatik olarak etkinleştirilir. Oluşturulan günlükler Azure portalındaki tanılama günlüklerinde görünür.