Uso del SDK de Node.js de Mobile AppsHow to use the Mobile Apps Node.js SDK

En este artículo se ofrece información detallada y ejemplos que muestran cómo trabajar con un back-end de Node.js en la característica Mobile Apps de Azure App Service.This article provides detailed information and examples that show how to work with a Node.js back end in the Mobile Apps feature of Azure App Service.

IntroducciónIntroduction

Mobile Apps proporciona la funcionalidad de agregar una API web de acceso a datos optimizada para móviles a una aplicación web.Mobile Apps provides the capability to add a mobile-optimized data access Web API to a web application. El SDK de Mobile Apps se proporciona para las aplicaciones web de ASP.NET y Node.js.The Mobile Apps SDK is provided for ASP.NET and Node.js web applications. El SDK proporciona las siguientes operaciones:The SDK provides the following operations:

  • Operaciones de tabla (lectura, inserción, actualización, eliminación) para el acceso a datosTable operations (read, insert, update, delete) for data access
  • Operaciones API personalizadasCustom API operations

Ambas operaciones proporcionan autenticación a través de todos los proveedores de identidad que Azure App Service permite.Both operations provide for authentication across all identity providers that Azure App Service allows. Estos proveedores incluyen proveedores de identidades sociales como Facebook, Twitter, Google y Microsoft, así como Azure Active Directory para identidades empresariales.These providers include social identity providers such as Facebook, Twitter, Google, and Microsoft, as well as Azure Active Directory for enterprise identity.

Puede encontrar ejemplos para cada caso de uso en el directorio de ejemplos de GitHub.You can find samples for each use case in the samples directory on GitHub.

Plataformas compatiblesSupported platforms

El SDK de Node.js de Mobile Apps es compatible con la versión LTS actual de Node y posterior.The Mobile Apps Node.js SDK supports the current LTS release of Node and later. Actualmente, la versión LTS más reciente es Node v4.5.0.Currently, the latest LTS version is Node v4.5.0. Aunque es posible que funcionen otras versiones de Node, no son compatibles.Other versions of Node might work but are not supported.

El SDK de Node.js de Mobile Apps es compatible con dos controladores de base de datos:The Mobile Apps Node.js SDK supports two database drivers:

  • El controlador de node-mssql admite instancias de SQL Server locales y de Azure SQL Database.The node-mssql driver supports Azure SQL Database and local SQL Server instances.
  • El controlador sqlite3 admite bases de datos de SQLite en una sola instancia.The sqlite3 driver supports SQLite databases on a single instance only.

Creación de un back-end de Node.js básico mediante la línea de comandosCreate a basic Node.js back end by using the command line

Cada back-end de Node.js de Mobile Apps se inicia como una aplicación ExpressJS.Every Mobile Apps Node.js back end starts as an ExpressJS application. ExpressJS es el marco del servicio web más popular disponible para Node.js.ExpressJS is the most popular web service framework available for Node.js. Puede crear una aplicación Express básica de la forma siguiente:You can create a basic Express application as follows:

  1. En una ventana de comandos o de PowerShell, cree un directorio para el proyecto:In a command or PowerShell window, create a directory for your project:

     mkdir basicapp
    
  2. Ejecute npm init para inicializar la estructura del paquete:Run npm init to initialize the package structure:

     cd basicapp
     npm init
    

    El comando npm init le formulará una serie de preguntas para inicializar el proyecto.The npm init command asks a set of questions to initialize the project. Vea el resultado del ejemplo:See the example output:

    La salida de npm init

  3. Instale las bibliotecas express y azure-mobile-apps desde el repositorio de npm:Install the express and azure-mobile-apps libraries from the npm repository:

     npm install --save express azure-mobile-apps
    
  4. Cree un archivo app.js para implementar el servidor móvil básico:Create an app.js file to implement the basic mobile server:

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

Esta aplicación crea una API web sencilla optimizada para móviles con un único punto de conexión (/tables/TodoItem) que proporciona el acceso no autenticado a un almacén de datos SQL subyacente mediante un esquema dinámico.This application creates a mobile-optimized Web API with a single endpoint (/tables/TodoItem) that provides unauthenticated access to an underlying SQL data store by using a dynamic schema. Es adecuado para los siguientes inicios rápidos de la biblioteca de cliente:It is suitable for following the client library quickstarts:

Puede encontrar el código de esta aplicación básica en el ejemplo "basicapp" en GitHub.You can find the code for this basic application in the basicapp sample on GitHub.

Crear un back-end de Node.js mediante Visual Studio 2015Create a Node.js back end by using Visual Studio 2015

Visual Studio 2015 requiere una extensión para desarrollar aplicaciones Node.js en el IDE.Visual Studio 2015 requires an extension to develop Node.js applications within the IDE. Para comenzar, instale Node.js Tools 1.1 para Visual Studio.To start, install the Node.js Tools 1.1 for Visual Studio. Cuando termine la instalación, cree una aplicación Express 4.x:When you finish the installation, create an Express 4.x application:

  1. Abra el cuadro de diálogo Nuevo proyecto (desde Archivo > Nuevo > Proyecto).Open the New Project dialog box (from File > New > Project).

  2. Expanda Plantillas > JavaScript > Node.js.Expand Templates > JavaScript > Node.js.

  3. Seleccione Basic Azure Node.js Express 4 Application.Select Basic Azure Node.js Express 4 Application.

  4. Rellene el nombre del proyecto.Fill in the project name. Seleccione Aceptar.Select OK.

    Nuevo proyecto de Visual Studio de 2015

  5. Haga clic con el botón derecho en el nodo npm y seleccione Instalar nuevos paquetes de NPM.Right-click the npm node and select Install New npm packages.

  6. Quizá tenga que actualizar el catálogo npm después de crear su primera aplicación de Node.js.You might need to refresh the npm catalog after you create your first Node.js application. Seleccione Actualizar si es necesario.Select Refresh if necessary.

  7. Escriba azure-mobile-apps en el cuadro de búsqueda.Enter azure-mobile-apps in the search box. Seleccione el paquete azure-mobile-apps 2.0.0 y, después, Instalar paquete.Select the azure-mobile-apps 2.0.0 package, and then select Install Package.

    Instalar nuevos paquetes de NMP

  8. Seleccione Cerrar.Select Close.

  9. Abra el archivo app.js para agregar compatibilidad con el SDK de Mobile Apps.Open the app.js file to add support for the Mobile Apps SDK. En la línea 6 al final de las instrucciones require de la biblioteca, agregue el código siguiente:At line 6 at the bottom of the library require statements, add the following code:

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

    Aproximadamente en la línea 27, después de las demás instrucciones app.use, agregue el código siguiente:At approximately line 27 after the other app.use statements, add the following code:

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

    Guarde el archivo.Save the file.

  10. Ejecute la aplicación localmente (la API se sirve en http://localhost:3000) o publíquela en Azure.Either run the application locally (the API is served on http://localhost:3000) or publish to Azure.

Creación de un back-end de Node.js mediante Azure PortalCreate a Node.js back end by using the Azure portal

Puede crear un nuevo back-end de Mobile Apps directamente en Azure Portal.You can create a Mobile Apps back end right in the Azure portal. Puede seguir los pasos que se muestran a continuación o crear un cliente y un servidor nuevos mediante el tutorial de creación de aplicaciones móviles.You can either complete the following steps or create a client and server together by following the Create a mobile app tutorial. El tutorial contiene una versión simplificada de estas instrucciones y se recomienda su lectura para proyectos de prueba de concepto.The tutorial contains a simplified version of these instructions and is best for proof-of-concept projects.

  1. Inicie sesión en Azure Portal.Sign in at the Azure portal.

  2. Seleccione +NUEVO > Web y móvil > Aplicación móvil y, después, proporcione un nombre para el back-end de Mobile Apps.Select +NEW > Web + Mobile > Mobile App, and then provide a name for your Mobile Apps back end.

  3. En Grupo de recursos, seleccione un grupo de recursos existente o cree uno nuevo (con el mismo nombre que su aplicación).For Resource Group, select an existing resource group, or create a new one (by using the same name as your app).

  4. Para Plan de App Service, se selecciona el plan predeterminado (en el plan Estándar).For App Service plan, the default plan (in the Standard tier) is selected. También puede seleccionar otro plan o crear uno.You can also select a different plan, or create a new one.

    La configuración del plan de App Service determina la ubicación, las características, el costo y los recursos de proceso asociados con la aplicación.The App Service plan's settings determine the location, features, cost, and compute resources associated with your app. Para más información acerca de los planes de App Service y cómo crear un nuevo plan en un plan de tarifa diferente en la ubicación deseada, consulte Introducción detallada a los planes de Azure App Service.For more about App Service plans and how to create a new plan in a different pricing tier and in your desired location, see Azure App Service plans in-depth overview.

  5. Seleccione Crear.Select Create. Este paso crea el back-end de Mobile Apps.This step creates the Mobile Apps back end.

  6. En el panel Configuración del nuevo back-end de Mobile Apps, seleccione Inicio rápido > la plataforma de aplicaciones cliente > Conectar a una base de datos.In the Settings pane for the new Mobile Apps back end, select Quick start > your client app platform > Connect a database.

    Selecciones para conectarse a una base de datos

  7. En el panel Agregar la conexión de datos, haga clic en SQL Database > Crear una base de datos nueva.In the Add data connection pane, select SQL Database > Create a new database. Escriba el nombre de la base de datos, elija un plan de tarifa y, después, seleccione Servidor.Enter the database name, choose a pricing tier, and then select Server. Puede reutilizar esta nueva base de datos.You can reuse this new database. Si ya tiene una base de datos en la misma ubicación, puede elegir Usar base de datos existente.If you already have a database in the same location, you can instead choose Use an existing database. No se recomienda el uso de una base de datos en una ubicación diferente debido a los costos de ancho de banda y a una mayor latencia.We don't recommend the use of a database in a different location, due to bandwidth costs and higher latency.

    Selección de una base de datos

  8. En el panel Nuevo servidor, escriba un nombre de servidor único en el cuadro Nombre del servidor, proporcione un inicio de sesión y una contraseña, active Permitir que los servicios de Azure accedan al servidor y seleccione Aceptar.In the New server pane, enter a unique server name in the Server name box, provide a login and password, select Allow Azure services to access server, and select OK. Este paso creará la nueva base de datos.This step creates the new database.

  9. De nuevo en el panel Agregar conexión de datos, seleccione Cadena de conexión, escriba los valores de inicio de sesión y contraseña para la base de datos y seleccione Aceptar.Back in the Add data connection pane, select Connection string, enter the login and password values for your database, and select OK.

    Espere unos minutos para que se implemente la base de datos correctamente antes de continuar.Wait a few minutes for the database to be deployed successfully before you proceed.

En el panel Comenzar, en Crear una API de tabla, elija Node.js como su lenguaje de back-end.Back in the Get started pane, under Create a table API, choose Node.js as your back-end language. Seleccione la casilla Reconozco que esta acción sobrescribirá el contenido del sitio web y, después, seleccione Crear tabla TodoItem.Select the box for I acknowledge that this will overwrite all site contents, and then select Create TodoItem table.

Descarga del proyecto de código de inicio rápido de un back-end de Node.js mediante GITDownload the Node.js back-end quickstart code project by using Git

Al crear un nuevo back-end de Mobile Apps de Node.js mediante el panel Inicio rápido del portal, se crea automáticamente un nuevo proyecto de Node.js y se implementa en su sitio.When you create a Node.js Mobile Apps back end by using the portal's Quick start pane, a Node.js project is created for you and deployed to your site. En el portal, puede agregar tablas y API, así como editar archivos de código para el back-end de Node.js.In the portal, you can add tables and APIs, and edit code files for the Node.js back end. Puede utilizar cualquiera de las herramientas de implementación para descargar el proyecto de back-end con el fin de agregar o modificar tablas y API, y publicar el proyecto de nuevo.You can also use various deployment tools to download the back-end project so that you can add or modify tables and APIs, and then republish the project. Para obtener más información, consulte la Guía de implementación de Azure App Service.For more information, see the Azure App Service deployment guide.

El siguiente procedimiento usa un repositorio de GIT para descargar el código del proyecto de inicio rápido:The following procedure uses a Git repository to download the quickstart project code:

  1. Si aún no lo ha hecho, instale Git.Install Git, if you haven't already done so. Los pasos requeridos para instalar Git varían según los sistemas operativos.The steps required to install Git vary between operating systems. Para obtener una guía sobre la instalación y las distribuciones específicas del sistema operativo, vea Installing Git (Instalación de Git).For operating system-specific distributions and installation guidance, see Installing Git.

  2. Consulte Preparación del repositorio para habilitar el repositorio de GIT para el sitio de back-end.See Prepare your repository to enable the Git repository for your back-end site. Anote el nombre de usuario y la contraseña de la implementación.Make a note of the deployment username and password.

  3. En el panel para el back-end de Mobile Apps, tome nota del valor de URL de clonación de Git.In the pane for your Mobile Apps back end, make a note of the Git clone URL setting.

  4. Ejecute el comando git clone mediante el uso de la dirección URL de clonación de GIT.Execute the git clone command by using the Git clone URL. Escriba la contraseña cuando se le solicite, como en el ejemplo siguiente:Enter your password when required, as in the following example:

     $ git clone https://username@todolist.scm.azurewebsites.net:443/todolist.git
    
  5. Desplácese al directorio local, (en el ejemplo anterior es /todolist), y observe si se han descargado archivos del proyecto.Browse to the local directory (/todolist in the preceding example), and notice that project files have been downloaded. Busque el archivo todoitem.json en el directorio /tables.Locate the todoitem.json file in the /tables directory. Este archivo define permisos en la tabla.This file defines permissions on the table. Busque también el archivo todoitem.js en el mismo directorio.Also find the todoitem.js file in the same directory. Define los scripts de la operación CRUD para la tabla.It defines the CRUD operation scripts for the table.

  6. Después de realizar cambios en archivos del proyecto, ejecute los siguientes comandos para agregar, confirmar y cargar los cambios en el sitio:After you make changes to project files, run the following commands to add, commit, and then upload the changes to the site:

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

    Al agregar nuevos archivos al proyecto, primero debe ejecutar el comando git add ..When you add new files to the project, you first need to run the git add . command.

Cada vez que se inserta un nuevo conjunto de confirmaciones en el sitio, se vuelve a publicar el sitio.The site is republished every time a new set of commits is pushed to the site.

Publicación del back-end de Node.js en AzurePublish your Node.js back end to Azure

Microsoft Azure proporciona varios mecanismos para publicar su back-end de Node.js de Mobile Apps en el servicio de Azure.Microsoft Azure provides many mechanisms for publishing your Mobile Apps Node.js back end to the Azure service. Estos mecanismos incluyen el uso de herramientas de implementación integradas en Visual Studio, herramientas de línea de comandos y opciones de implementación continua basadas en control de código fuente.These mechanisms include deployment tools integrated into Visual Studio, command-line tools, and continuous deployment options based on source control. Para obtener más información, consulte la Guía de implementación de Azure App Service.For more information, see the Azure App Service deployment guide.

Azure App Service tiene instrucciones específicas para aplicaciones de Node.js que usted debe revisar antes de publicar el back-end:Azure App Service has specific advice for Node.js applications that you should review before you publish the back end:

Habilitación de una página de inicio para la aplicaciónEnable a home page for your application

Muchas aplicaciones son una combinación de aplicaciones móviles y web.Many applications are a combination of web and mobile apps. Puede usar el marco ExpressJS para combinar las dos facetas.You can use the ExpressJS framework to combine the two facets. Sin embargo, es posible que en ocasiones solo quiera implementar una interfaz móvil.Sometimes, however, you might want to only implement a mobile interface. Es útil proporcionar una página principal para garantizar que el servicio de aplicaciones está en funcionamiento.It's useful to provide a home page to ensure that the app service is up and running. Puede proporcionar su propia página de inicio o habilitar una de carácter temporal.You can either provide your own home page or enable a temporary home page. Para habilitar una página de inicio temporal, utilice el código siguiente para crear instancias de Mobile Apps:To enable a temporary home page, use the following code to instantiate Mobile Apps:

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

Puede agregar esta opción al archivo azureMobile.js si solo quiere que esta opción esté disponible al desarrollar de forma local.If you only want this option available when developing locally, you can add this setting to your azureMobile.js file.

Operaciones de tablaTable operations

El SDK del servidor de Node.js de azure-mobile-apps proporciona mecanismos para exponer las tablas de datos almacenadas en Azure SQL Database como una API web.The azure-mobile-apps Node.js Server SDK provides mechanisms to expose data tables stored in Azure SQL Database as a Web API. Proporciona cinco operaciones:It provides five operations:

OperaciónOperation DESCRIPCIÓNDescription
GET /tables/nombredelatablaGET /tables/tablename Permite obtener todos los registros de la tabla.Get all records in the table.
GET /tables/nombredelatabla/:idGET /tables/tablename/:id Permite obtener un registro específico de la tabla.Get a specific record in the table.
POST /tables/nombredelatablaPOST /tables/tablename Permite crear un registro en la tabla.Create a record in the table.
PATCH /tables/nombredelatabla/:idPATCH /tables/tablename/:id Permite actualizar un registro de la tabla.Update a record in the table.
DELETE /tables/nombredelatabla/:idDELETE /tables/tablename/:id Permite eliminar un registro de la tabla.Delete a record in the table.

Esta API web admite OData y amplía el esquema de tabla para admitir la sincronización de datos sin conexión.This Web API supports OData and extends the table schema to support offline data sync.

Definición de tablas con un esquema dinámicoDefine tables by using a dynamic schema

Para poder usar una tabla, debe definirla.Before you can use a table, you must define it. Puede definir tablas con un esquema estático (en el que define las columnas en el esquema) o dinámicamente (en el que el SDK controla el esquema según las solicitudes entrantes).You can define tables by using a static schema (where you define the columns in the schema) or dynamically (where the SDK controls the schema based on incoming requests). Además, puede controlar aspectos específicos de la API web agregando código JavaScript a la definición.In addition, you can control specific aspects of the Web API by adding JavaScript code to the definition.

Como procedimiento recomendado, debe definir cada tabla en un archivo de JavaScript en el directorio tables y, luego, usar el método tables.import() para importar las tablas.As a best practice, you should define each table in a JavaScript file in the tables directory, and then use the tables.import() method to import the tables. Al ampliar el ejemplo basic-app, el archivo app.js debe ajustarse:Extending the basic-app sample, you would adjust the app.js file:

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

Defina la tabla en ./tables/TodoItem.js:Define the table in ./tables/TodoItem.js:

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

var table = azureMobileApps.table();

// Additional configuration for the table goes here.

module.exports = table;

Las tablas usan un esquema dinámico de forma predeterminada.Tables use a dynamic schema by default. Para desactivar el esquema dinámico globalmente, establezca la opción MS_DynamicSchema de la aplicación en false en Azure Portal.To turn off the dynamic schema globally, set the MS_DynamicSchema app setting to false in the Azure portal.

Puede encontrar un ejemplo completo en el ejemplo "todo" en GitHub.You can find a complete example in the todo sample on GitHub.

Definición de tablas con un esquema estáticoDefine tables by using a static schema

Puede definir explícitamente las columnas que desea exponer a través de la API web.You can explicitly define the columns to expose via the Web API. El SDK de Node.js de azure-mobile-apps agregará automáticamente todas las columnas adicionales necesarias para la sincronización de datos sin conexión a la lista que se proporcione.The azure-mobile-apps Node.js SDK automatically adds any extra columns required for offline data sync to the list that you provide. Por ejemplo, las aplicaciones de cliente de inicio rápido requieren una tabla con dos columnas: text (una cadena) y complete (un booleano).For example, the quickstart client applications require a table with two columns: text (a string) and complete (a Boolean).
Esta tabla se puede definir en el archivo JavaScript de definición de la tabla (ubicado en el directorio de tables) de la forma siguiente:The table can be defined in the table definition JavaScript file (located in the tables directory) as follows:

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;

Si define las tablas estáticamente, también debe llamar al método tables.initialize() para crear el esquema de base de datos en el inicio.If you define tables statically, you must also call the tables.initialize() method to create the database schema on startup. El método tables.initialize() devuelve promise, que se usa para asegurarse de que el servicio web no atienda solicitudes antes de que la base de datos se inicialice.The tables.initialize() method returns a promise so that the web service does not serve requests before the database is initialized.

Uso de SQL Server Express como almacén de datos de desarrollo en el equipo localUse SQL Server Express as a development data store on your local machine

El SDK de Node.js de Mobile Apps proporciona tres opciones para proporcionar datos listos para usar:The Mobile Apps Node.js SDK provides three options for serving data out of the box:

  • Use el controlador memory para proporcionar un almacén de ejemplos no persistente.Use the memory driver to provide a non-persistent example store.
  • Utilice el controlador mssql para ofrecer un almacén de datos SQL Server Express para desarrollo.Use the mssql driver to provide a SQL Server Express data store for development.
  • Use el controlador mssql para ofrecer un almacén de datos de Azure SQL Database para producción.Use the mssql driver to provide an Azure SQL Database data store for production.

El SDK de Node.js de Mobile Apps usa el paquete de mssql para Node.js para establecer y usar una conexión tanto a SQL Server Express como a SQL Database.The Mobile Apps Node.js SDK uses the mssql Node.js package to establish and use a connection to both SQL Server Express and SQL Database. Este paquete requiere que habilite las conexiones TCP en la instancia de SQL Server Express.This package requires that you enable TCP connections on your SQL Server Express instance.

Sugerencia

El controlador memory no proporciona un conjunto completo de servicios para la realización de pruebas.The memory driver does not provide a complete set of facilities for testing. Si quiere probar el back-end localmente, se recomienda el uso de un almacén de datos de SQL Server Express y del controlador mssql.If you want to test your back end locally, we recommend the use of a SQL Server Express data store and the mssql driver.

  1. Descargue e instale Microsoft SQL Server 2014 Express.Download and install Microsoft SQL Server 2014 Express. Asegúrese de instalar la edición SQL Server 2014 Express con Tools.Ensure that you install the SQL Server 2014 Express with Tools edition. A menos que necesite expresamente compatibilidad con 64 bits, la versión de 32 bits consumirá menos memoria cuando se ejecuta.Unless you explicitly require 64-bit support, the 32-bit version consumes less memory when running.

  2. Ejecute el Administrador de configuración de SQL Server 2014:Run SQL Server 2014 Configuration Manager:

    a.a. Expanda el nodo Configuración de red de SQL Server en el menú de árbol.Expand the SQL Server Network Configuration node in the tree menu.

    b.b. Seleccione Protocolos para SQLEXPRESS.Select Protocols for SQLEXPRESS.

    c.c. Haga clic con el botón derecho en TCP/IP y seleccione Habilitar.Right-click TCP/IP and select Enable. Seleccione Aceptar en el cuadro de diálogo emergente.Select OK in the pop-up dialog box.

    d.d. Haga clic con el botón derecho en TCP/IP y seleccione Propiedades.Right-click TCP/IP and select Properties.

    e.e. Seleccione la pestaña Direcciones IP.Select the IP Addresses tab.

    f.f. Busque el nodo IPAll .Find the IPAll node. En el campo Puerto TCP, escriba 1433.In the TCP Port field, enter 1433.

    Configure SQL Server Express para TCP/IP.

    g.g. Seleccione Aceptar.Select OK. Seleccione Aceptar en el cuadro de diálogo emergente.Select OK in the pop-up dialog box.

    h.h. Seleccione Servicios de SQL Server en el menú de árbol.Select SQL Server Services in the tree menu.

    i.i. Haga clic con el botón derecho en SQL Server (SQLEXPRESS) y seleccione Reiniciar.Right-click SQL Server (SQLEXPRESS) and select Restart.

    j.j. Cierre el Administrador de configuración de SQL Server 2014.Close SQL Server 2014 Configuration Manager.

  3. Ejecute SQL Server 2014 Management Studio y conéctese a la instancia local de SQL Server Express:Run SQL Server 2014 Management Studio and connect to your local SQL Server Express instance:

    1. Haga clic con el botón derecho en la instancia del Explorador de objetos y seleccione Propiedades.Right-click your instance in Object Explorer and select Properties.

    2. Seleccione la página Seguridad .Select the Security page.

    3. Asegúrese de que el Modo de autenticación de Windows y SQL Server está seleccionado.Ensure that SQL Server and Windows Authentication mode is selected.

    4. Seleccione Aceptar.Select OK.

      Configurar la autenticación de SQL Server Express

    5. Expanda Seguridad > Inicios de sesión en el Explorador de objetos.Expand Security > Logins in Object Explorer.

    6. Haga clic con el botón derecho en Inicios de sesión y seleccione Nuevo inicio de sesión.Right-click Logins and select New Login.

    7. Escriba un nombre de inicio de sesión.Enter a login name. Seleccione Autenticación de SQL Server.Select SQL Server authentication. Escriba una contraseña y vuelva a escribirla en Confirmar contraseña.Enter a password, and then enter the same password in Confirm password. La contraseña debe cumplir los requisitos de complejidad de Windows.The password must meet Windows complexity requirements.

    8. Seleccione Aceptar.Select OK.

      Agregar un nuevo usuario a SQL Server Express

    9. Haga clic con el botón derecho en el nuevo inicio de sesión y seleccione Propiedades.Right-click your new login and select Properties.

    10. Seleccione la página Roles del servidor.Select the Server Roles page.

    11. Seleccione la casilla para el rol de servidor dbcreator.Select the check box for the dbcreator server role.

    12. Seleccione Aceptar.Select OK.

    13. Cierre SQL Server 2015 Management Studio.Close SQL Server 2015 Management Studio.

Asegúrese de registrar el nombre de usuario y la contraseña que seleccionó.Be sure to record the username and password that you selected. Puede que necesite asignar permisos o roles de servidor adicionales dependiendo de los requisitos de la base de datos.You might need to assign additional server roles or permissions, depending on your database requirements.

La aplicación de Node.js lee la variable de entorno SQLCONNSTR_MS_TableConnectionString de la cadena de conexión de esta base de datos.The Node.js application reads the SQLCONNSTR_MS_TableConnectionString environment variable for the connection string for this database. Se puede establecer en el entorno.You can set this variable in your environment. Por ejemplo, puede usar PowerShell para establecer esta variable de entorno:For example, you can use PowerShell to set this environment variable:

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

Acceda a la base de datos a través de una conexión TCP/IP.Access the database through a TCP/IP connection. Proporcione un nombre de usuario y una contraseña para la conexión.Provide a username and password for the connection.

Configuración del proyecto para el desarrollo localConfigure your project for local development

Mobile Apps lee un archivo de JavaScript denominado azureMobile.js del sistema de archivos local.Mobile Apps reads a JavaScript file called azureMobile.js from the local file system. No utilice este archivo para configurar el SDK de Mobile Apps en producción.Do not use this file to configure the Mobile Apps SDK in production. En su lugar, use Configuración de aplicaciones en Azure Portal.Instead, use App settings in the Azure portal.

El archivo azureMobile.js debe exportar un objeto de configuración.The azureMobile.js file should export a configuration object. La configuración más común es la siguiente:The most common settings are:

  • Configuración de base de datosDatabase settings
  • Configuración del registro de diagnósticoDiagnostic logging settings
  • Configuración de CORS alternativaAlternate CORS settings

Este archivo azureMobile.js de ejemplo implementa la configuración de la base de datos anterior:This example azureMobile.js file implements the preceding database settings:

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

Se recomienda que agregue azureMobile.js al archivo .gitignore (o a otro archivo de omisiones de control de código fuente) para evitar que las contraseñas se almacenen en la nube.We recommend that you add azureMobile.js to your .gitignore file (or other source code control ignore file) to prevent passwords from being stored in the cloud. Configure siempre los valores de producción en Configuración de aplicaciones dentro de Azure Portal.Always configure production settings in App settings within the Azure portal.

Configuración de aplicaciones móvilesConfigure app settings for your mobile app

La mayoría de las opciones de configuración del archivo azureMobile.js tienen una configuración de aplicación equivalente en Azure Portal.Most settings in the azureMobile.js file have an equivalent app setting in the Azure portal. Para configurar la aplicación en Configuración de aplicaciones, use la siguiente lista:Use the following list to configure your app in App settings:

Configuración de aplicaciónApp setting Configuración de azureMobile.jsazureMobile.js setting DESCRIPCIÓNDescription Valores válidosValid values
MS_MobileAppNameMS_MobileAppName Nombrename Nombre de la aplicaciónName of the app stringstring
MS_MobileLoggingLevelMS_MobileLoggingLevel logging.levellogging.level Nivel mínimo de registro de mensajes en el registroMinimum log level of messages to log error, advertencia, información, detallado, depuración, absurdoerror, warning, info, verbose, debug, silly
MS_DebugModeMS_DebugMode debugdebug Habilita o deshabilita el modo de depuraciónEnables or disables debug mode true, falsetrue, false
MS_TableSchemaMS_TableSchema data.schemadata.schema Nombre del esquema predeterminado para tablas SQLDefault schema name for SQL tables cadena (valor predeterminado: dbo)string (default: dbo)
MS_DynamicSchemaMS_DynamicSchema data.dynamicSchemadata.dynamicSchema Habilita o deshabilita el modo de depuraciónEnables or disables debug mode true, falsetrue, false
MS_DisableVersionHeaderMS_DisableVersionHeader version (establecida en undefined)version (set to undefined) Deshabilita el encabezado X-ZUMO-Server-VersionDisables the X-ZUMO-Server-Version header true, falsetrue, false
MS_SkipVersionCheckMS_SkipVersionCheck skipversioncheckskipversioncheck Deshabilita la comprobación de la versión de API de clienteDisables the client API version check true, falsetrue, false

Para establecer una configuración de aplicación:To set an app setting:

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.
  2. Seleccione Todos los recursos o App Services y, después, haga clic en el nombre de la aplicación móvil.Select All resources or App Services, and then select the name of your mobile app.
  3. El panel Configuración se abre de forma predeterminada.The Settings pane opens by default. En caso contrario, haga clic en Configuración.If it doesn't, select Settings.
  4. En el menú GENERAL, seleccione Configuración de la aplicación.On the GENERAL menu, select Application settings.
  5. Desplácese hasta la sección Configuración de la aplicación.Scroll to the App settings section.
  6. Si la configuración de la aplicación ya existe, seleccione el valor de configuración de la aplicación para editarlo.If your app setting already exists, select the value of the app setting to edit the value. Si no existe, escriba la configuración de aplicación en el cuadro Clave y el valor en el cuadro Valor.If your app setting does not exist, enter the app setting in the Key box and the value in the Value box.
  7. Seleccione Guardar.Select Save.

Si cambia la mayoría de las opciones de configuración de la aplicación habrá que reiniciar el servicio.Changing most app settings requires a service restart.

Uso de SQL Database como almacén de datos de producciónUse SQL Database as your production data store

El uso de Azure SQL Database como almacén de datos es idéntico en todos los tipos de aplicaciones de Azure App Service.Using Azure SQL Database as a data store is identical across all Azure App Service application types. Si todavía no lo ha hecho, siga estos pasos para crear un back-end de Mobile Apps:If you have not done so already, follow these steps to create a Mobile Apps back end:

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.

  2. En la parte superior izquierda de la ventana, haga clic en el botón +NUEVO > Web y móvil> Aplicación móvil y, después, especifique el nombre del back-end de Mobile Apps.In the upper left of the window, select the +NEW button > Web + Mobile > Mobile App, and then provide a name for your Mobile Apps back end.

  3. En el cuadro Grupo de recursos , escriba el mismo nombre de la aplicación.In the Resource Group box, enter the same name as your app.

  4. Se seleccionará el plan de App Service predeterminado.The default App Service plan is selected. Si desea cambiar su plan de App Service:If you want to change your App Service plan:

    a.a. Seleccione Plan de App Service > +Crear nuevo.Select App Service Plan > +Create New.

    b.b. Proporcione un nombre al plan de App Service nuevo y seleccione una ubicación adecuada.Provide a name of the new App Service plan and select an appropriate location.

    c.c. Seleccione un plan de tarifa adecuado para el servicio.Select an appropriate pricing tier for the service. Seleccione Ver todos para ver más opciones de precios, como Gratis y Compartido.Select View all to view more pricing options, such as Free and Shared.

    d.d. Haga clic en el botón Seleccionar.Click the Select button.

    e.e. De nuevo en el panel Plan de App Service, seleccione Aceptar.Back in the App Service plan pane, select OK.

  5. Seleccione Crear.Select Create.

El aprovisionamiento de un back-end de Mobile Apps puede tardar unos minutos.Provisioning a Mobile Apps back end can take a couple of minutes. Cuando se aprovisiona el back-end de Mobile Apps, el portal abre el panel Configuración del back-end de Mobile Apps.After the Mobile Apps back end is provisioned, the portal opens the Settings pane for the Mobile Apps back end.

Puede conectar una base de datos SQL al back-end de Mobile Apps o bien crear una nueva base de datos SQL.You can choose to either connect an existing SQL database to your Mobile Apps back end or create a new SQL database. En esta sección, crearemos una nueva base de datos SQL.In this section, we create a SQL database.

Nota

Si ya hay una base de datos en la misma ubicación que el back-end de Mobile Apps, puede seleccionar Utilizar una base de datos existente7 y seleccionar dicha base de datos.If you already have a database in the same location as the Mobile Apps back end, you can instead select Use an existing database and then select that database. No se recomienda el uso de una base de datos en una ubicación diferente debido a las elevadas latencias.We don't recommend the use of a database in a different location because of higher latencies.

  1. En el nuevo back-end de Mobile Apps, seleccione Configuración > Aplicación móvil > Datos > +Agregar.In the new Mobile Apps back end, select Settings > Mobile App > Data > +Add.

  2. En el panel Agregar la conexión de datos, haga clic en SQL Database - Configurar los valores obligatorios > Crear una base de datos nueva.In the Add data connection pane, select SQL Database - Configure required settings > Create a new database. Escriba el nombre de la base de datos nueva en el cuadro Nombre.Enter the name of the new database in the Name box.

  3. Seleccione Servidor.Select Server. En el panel Nuevo servidor, escriba un nombre de servidor único en el cuadro Nombre del servidor y especifique un inicio de sesión del administrador del servidor y una contraseña apropiados.In the New server pane, enter a unique server name in the Server name box, and provide a suitable server admin login and password. Asegúrese de que la opción Permitir que los servicios de Azure accedan al servidor esté seleccionada.Ensure that Allow azure services to access server is selected. Seleccione Aceptar.Select OK.

    Crear una base de datos de Azure SQL

  4. En el panel Nueva base de datos, seleccione Aceptar.In the New database pane, select OK.

  5. En el panel Agregar la conexión de datos, seleccione Cadena de conexión y especifique el inicio de sesión y la contraseña que indicó al crear la base de datos.Back in the Add data connection pane, select Connection string, and enter the login and password that you provided when you created the database. Si usa una base de datos existente, indique las credenciales de inicio de sesión de esa base de datos.If you use an existing database, provide the login credentials for that database. Seleccione Aceptar.Select OK.

  6. De nuevo en el panel Agregar la conexión de datos, haga clic en Aceptar para crear la base de datos.Back in the Add data connection pane again, select OK to create the database.

La creación de la base de datos puede tardar unos minutos.Creation of the database can take a few minutes. Use el área de notificaciones para supervisar el progreso de la implementación.Use the Notifications area to monitor the progress of the deployment. No continúe hasta que la base de datos se haya implementado correctamente.Do not progress until the database is deployed successfully. Una vez implementada correctamente, se creará una cadena de conexión para la instancia de SQL Database en la configuración de la aplicación de back-end de Mobile Apps.After the database is deployed, a connection string is created for the SQL Database instance in your Mobile Apps back-end app settings. Puede ver la configuración de esta aplicación en Configuración > Configuración de la aplicación > Cadenas de conexión.You can see this app setting in Settings > Application settings > Connection strings.

Requerimiento de la autenticación para acceder a las tablasRequire authentication for access to tables

Si quiere usar la autenticación de App Service con el punto de conexión tables, tiene que configurar primero la autenticación de App Service en Azure Portal.If you want to use App Service Authentication with the tables endpoint, you must configure App Service Authentication in the Azure portal first. Para obtener más información, consulte la guía de configuración del proveedor de identidades que quiere usar:For more information, see the configuration guide for the identity provider that you intend to use:

Cada tabla tiene una propiedad de acceso que se puede usar para controlar el acceso a la tabla.Each table has an access property that you can use to control access to the table. En el ejemplo siguiente se muestra una tabla definida estáticamente con la autenticación necesaria.The following sample shows a statically defined table with authentication required.

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;

La propiedad de acceso puede tomar uno de tres valores:The access property can take one of three values:

  • anonymous indica que la aplicación cliente puede leer los datos sin autenticación.anonymous indicates that the client application is allowed to read data without authentication.
  • authenticated indica que la aplicación cliente tiene que enviar un token de autenticación válido con la solicitud.authenticated indicates that the client application must send a valid authentication token with the request.
  • disabled indica que esta tabla está deshabilitada actualmente.disabled indicates that this table is currently disabled.

Si la propiedad de acceso no está definida, se permite el acceso no autenticado.If the access property is undefined, unauthenticated access is allowed.

Uso de notificaciones de autenticación con las tablasUse authentication claims with your tables

Puede configurar varias notificaciones que se solicitan cuando se configura la autenticación.You can set up various claims that are requested when authentication is set up. Estas notificaciones no suelen estar disponibles por medio del objeto context.user .These claims are not normally available through the context.user object. Sin embargo, se pueden recuperar mediante el uso del método context.user.getIdentity().However, you can retrieve them by using the context.user.getIdentity() method. El método getIdentity() devuelve una promesa que se resuelve en un objeto.The getIdentity() method returns a promise that resolves to an object. El objeto se protege con clave mediante el método de autenticación (facebook, google, twitter, microsoftaccount o aad).The object is keyed by the authentication method (facebook, google, twitter, microsoftaccount, or aad).

Por ejemplo, si establece la autenticación mediante una cuenta Microsoft y solicita la notificación de direcciones de correo electrónico, puede agregar la dirección de correo electrónico al registro con el controlador de tabla siguiente:For example, if you set up Microsoft account authentication and request the email addresses claim, you can add the email address to the record with the following table controller:

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;

Para ver qué notificaciones están disponibles, use un explorador web para ver el punto de conexión /.auth/me de su sitio.To see what claims are available, use a web browser to view the /.auth/me endpoint of your site.

Deshabilitación del acceso a operaciones de tabla específicasDisable access to specific table operations

Además de aparecer en la tabla, la propiedad de acceso puede usarse para controlar operaciones individuales.In addition to appearing on the table, the access property can be used to control individual operations. Hay cuatro operaciones:There are four operations:

  • read es la operación GET de RESTful en la tabla.read is the RESTful GET operation on the table.
  • insert es la operación POST de RESTful en la tabla.insert is the RESTful POST operation on the table.
  • update es la operación PATCH de RESTful en la tabla.update is the RESTful PATCH operation on the table.
  • delete es la operación DELETE de RESTful en la tabla.delete is the RESTful DELETE operation on the table.

Por ejemplo, es posible que quiera proporcionar una tabla de solo lectura no autenticada:For example, you might want to provide a read-only unauthenticated table:

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;

Ajuste de la consulta que se usa con las operaciones de tablaAdjust the query that is used with table operations

Un requisito común para las operaciones de tabla consiste en proporcionar una vista restringida de los datos.A common requirement for table operations is to provide a restricted view of the data. Por ejemplo, puede proporcionar una tabla etiquetada con el identificador del usuario autenticado de modo que solo pueda leer o actualizar sus propios registros.For example, you can provide a table that is tagged with the authenticated user ID such that you can only read or update your own records. La definición de la tabla siguiente proporcionará esta funcionalidad:The following table definition provides this functionality:

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;

Las operaciones que normalmente ejecutan una consulta tendrán una propiedad de consulta que se puede ajustar con una cláusula where.Operations that normally run a query have a query property that you can adjust by using a where clause. La propiedad de consulta es un objeto QueryJS que se usa para convertir una consulta de OData en algo que puede procesar el back-end de datos.The query property is a QueryJS object that is used to convert an OData query to something that the data back end can process. En los casos de igualdad simple (como el anterior), puede usarse una asignación.For simple equality cases (like the preceding one), you can use a map. También puede agregar cláusulas SQL específicas:You can also add specific SQL clauses:

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

Configuración de una eliminación temporal en una tablaConfigure a soft delete on a table

Una eliminación temporal no elimina realmente los registros.A soft delete does not actually delete records. Los marca como eliminados dentro de la base de datos al establecer la columna de eliminados en true.Instead it marks them as deleted within the database by setting the deleted column to true. El SDK de Mobile Apps quita automáticamente los registros temporalmente eliminados de los resultados, a menos que el SDK de cliente móvil use IncludeDeleted().The Mobile Apps SDK automatically removes soft-deleted records from results unless the Mobile Client SDK uses IncludeDeleted(). Si quiere configurar una tabla para la eliminación temporal, establezca la propiedad softDelete en el archivo de definición de tabla:To configure a table for a soft delete, set the softDelete property in the table definition file:

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;

Debe establecer un mecanismo para eliminar registros, ya sea desde una aplicación cliente, un trabajo web, una función de Azure o una API personalizada.You should establish a mechanism for deleting records: a client application, a WebJob, an Azure function, or a custom API.

Inicialización de la base de datos con datosSeed your database with data

Al crear una nueva aplicación, puede inicializar una tabla con datos.When you're creating a new application, you might want to seed a table with data. Esto puede hacerse en el archivo JavaScript de definición de tabla de la forma siguiente:You can do this within the table definition JavaScript file as follows:

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;

La inicialización de datos solo se produce si usó el SDK de Mobile Apps para crear la tabla.Seeding of data happens only when you've used the Mobile Apps SDK to create the table. Si la tabla ya existe en la base de datos, no se inserta ningún dato en la tabla.If the table already exists in the database, no data is injected into the table. Si el esquema dinámico está activado, se deducirá el esquema de los datos inicializados.If the dynamic schema is turned on, the schema is inferred from the seeded data.

Se recomienda llamar expresamente al método tables.initialize() para crear la tabla cuando el servicio comienza a ejecutarse.We recommend that you explicitly call the tables.initialize() method to create the table when the service starts running.

Habilitación de la compatibilidad con SwaggerEnable Swagger support

Mobile Apps incorpora compatibilidad con Swagger.Mobile Apps comes with built-in Swagger support. Para habilitar la compatibilidad con Swagger, instale primero el archivo swagger-ui como una dependencia:To enable Swagger support, first install swagger-ui as a dependency:

npm install --save swagger-ui

Puede habilitar la compatibilidad con Swagger en el constructor de Mobile Apps:You can then enable Swagger support in the Mobile Apps constructor:

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

Es probable que solo quiera habilitar la compatibilidad con Swagger en las ediciones de desarrollo.You probably only want to enable Swagger support in development editions. Puede hacerlo mediante la configuración de la aplicación NODE_ENV:You can do this by using the NODE_ENV app setting:

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

El punto de conexión swagger se encuentra en http://yoursite.azurewebsites.net/swagger.The swagger endpoint is located at http://yoursite.azurewebsites.net/swagger. Puede acceder a la interfaz de usuario de Swagger a través del punto de conexión de /swagger/ui .You can access the Swagger UI via the /swagger/ui endpoint. Si elige pedir autenticación en la aplicación entera, se producirá un error en Swagger.If you choose to require authentication across your entire application, Swagger produces an error. Para obtener los mejores resultados, permita las solicitudes no autenticadas en la configuración de autenticación y autorización de Azure App Service y, luego, controle la autenticación mediante la propiedad table.access.For best results, choose to allow unauthenticated requests in the Azure App Service Authentication/Authorization settings, and then control authentication by using the table.access property.

También puede agregar la opción de Swagger a su archivo azureMobile.js si solo quiere que haya compatibilidad con Swagger al desarrollar de forma local.You can also add the Swagger option to your azureMobile.js file if you only want Swagger support for developing locally.

Notificaciones pushPush notifications

Mobile Apps se integra con Azure Notification Hubs para permitir el envío de notificaciones push destinadas a millones de dispositivos en las plataformas más importantes.Mobile Apps integrates with Azure Notification Hubs so you can send targeted push notifications to millions of devices across all major platforms. Mediante el uso de Notification Hubs puede enviar notificaciones push a dispositivos iOS, Android y Windows.By using Notification Hubs, you can send push notifications to iOS, Android, and Windows devices. Para más información sobre todo lo que puede hacer con Notification Hubs, vea Información general de Notification Hubs.To learn more about all that you can do with Notification Hubs, see the Notification Hubs overview.

Envío de notificaciones pushSend push notifications

El código siguiente muestra cómo utilizar el objeto push para enviar una notificación push de difusión a dispositivos iOS registrados:The following code shows how to use the push object to send a broadcast push notification to registered iOS devices:

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

Al crear un registro de inserción de plantillas desde el cliente, puede enviar un mensaje de inserción de plantilla a dispositivos en todas las plataformas compatibles.By creating a template push registration from the client, you can instead send a template push message to devices on all supported platforms. El código siguiente muestra cómo enviar una notificación de plantilla:The following code shows how to send a template notification:

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

Envío de notificaciones push a un usuario autenticado mediante etiquetasSend push notifications to an authenticated user by using tags

Cuando un usuario autenticado se registra para las notificaciones push, se agrega automáticamente una etiqueta con el identificador de usuario al registro.When an authenticated user registers for push notifications, a user ID tag is automatically added to the registration. Mediante el uso de esta etiqueta, puede enviar notificaciones push a todos los dispositivos registrados por un usuario específico.By using this tag, you can send push notifications to all devices registered by a specific user. El código siguiente obtiene el SID del usuario que realiza la solicitud y envía una notificación push de plantilla a cada registro de dispositivo para ese usuario:The following code gets the SID of user who's making the request and sends a template push notification to every device registration for that user:

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

Cuando se registre para notificaciones push desde un cliente autenticado, asegúrese de que la autenticación se ha completado antes de intentar el registro.When you're registering for push notifications from an authenticated client, make sure that authentication is complete before you attempt registration.

API personalizadasCustom APIs

Definición de una API personalizadaDefine a custom API

Además de la API de acceso a datos a través del punto de conexión /tables, Mobile Apps puede proporcionar cobertura de API personalizada.In addition to the Data Access API via the /tables endpoint, Mobile Apps can provide custom API coverage. Las API personalizadas se definen de forma similar a las definiciones de tabla y pueden tener acceso a las mismas utilidades, incluida la autenticación.Custom APIs are defined in a similar way to the table definitions and can access all the same facilities, including authentication.

Si quiere usar la autenticación de App Service con la API personalizada, debe configurar primero la autenticación de App Service en Azure Portal.If you want to use App Service Authentication with a custom API, you must configure App Service Authentication in the Azure portal first. Para obtener más información, consulte la guía de configuración del proveedor de identidades que quiere usar:For more information, see the configuration guide for the identity provider that you intend to use:

La definición de API personalizadas es muy similar a la de API de tablas:Custom APIs are defined in much the same way as the Tables API:

  1. Crear un directorio api.Create an api directory.
  2. Cree un archivo JavaScript de definición de API en el directorio api.Create an API definition JavaScript file in the api directory.
  3. Use el método import para importar el directorio api.Use the import method to import the api directory.

A continuación se muestra la definición de la API de prototipo basada en el ejemplo de aplicación básica usado anteriormente:Here is the prototype API definition based on the basic-app sample that we used earlier:

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

Veamos un ejemplo de una API sencilla que devolverá la fecha del servidor mediante el método Date.now().Let's take an example API that returns the server date by using the Date.now() method. Este es el archivo api/date.js:Here is the api/date.js file:

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

module.exports = api;

Cada parámetro es uno de los verbos estándar de RESTful: GET, POST, PATCH o DELETE.Each parameter is one of the standard RESTful verbs: GET, POST, PATCH, or DELETE. El método es una función estándar de ExpressJS middleware que envía la salida necesaria.The method is a standard ExpressJS middleware function that sends the required output.

Autenticación necesaria para el acceso a una API personalizadaRequire authentication for access to a custom API

El SDK de Mobile Apps implementa la autenticación de la misma manera para el punto de conexión tables y para las API personalizadas.The Mobile Apps SDK implements authentication in the same way for both the tables endpoint and custom APIs. Para agregar autenticación a la API desarrollada en la sección anterior, agregue una propiedad access:To add authentication to the API developed in the previous section, add an access property:

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;

También puede especificar la autenticación en operaciones específicas:You can also specify authentication on specific operations:

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;

Debe usar el mismo token que se utiliza para el punto de conexión tables en las API personalizadas que requieren autenticación.The same token that is used for the tables endpoint must be used for custom APIs that require authentication.

Control de cargas de archivos de gran tamañoHandle large file uploads

El SDK de Mobile Apps usa el middleware de analizador de cuerpo para aceptar y descodificar el contenido del cuerpo del envío.The Mobile Apps SDK uses the body-parser middleware to accept and decode body content in your submission. Puede configurar previamente el analizador de cuerpo para aceptar tamaños mayores de cargas de archivos:You can preconfigure body-parser to accept larger file uploads:

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

El archivo está codificado en Base 64 antes de la transmisión,The file is base-64 encoded before transmission. por lo que aumenta el tamaño de la carga real y, por tanto, el que debe tener en cuenta.This encoding increases the size of the actual upload (and the size that you must account for).

Ejecución de instrucciones SQL personalizadasExecute custom SQL statements

El SDK de Mobile Apps permite el acceso a todo el contexto a través del objeto de solicitud.The Mobile Apps SDK allows access to the entire context through the request object. Puede ejecutar fácilmente instrucciones SQL con parámetros para el proveedor de datos definido:You can easily execute parameterized SQL statements to the defined data provider:

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;

Depuración, y tablas y API fácilesDebugging, Easy Tables, and Easy APIs

Depuración, diagnóstico y solución de problemas de Mobile AppsDebug, diagnose, and troubleshoot Mobile Apps

Azure App Service proporciona varias técnicas de depuración y de solución de problemas para las aplicaciones Node.js.Azure App Service provides several debugging and troubleshooting techniques for Node.js applications. Consulte los siguientes artículos para empezar a solucionar problemas de su back-end de Node.js de Mobile Apps:To get started in troubleshooting your Node.js Mobile Apps back end, see the following articles:

Las aplicaciones Node.js tienen acceso a una amplia gama de herramientas de registro de diagnóstico.Node.js applications have access to a wide range of diagnostic log tools. Internamente, el SDK de Node.js de Mobile Apps usa Winston para el registro de diagnóstico.Internally, the Mobile Apps Node.js SDK uses Winston for diagnostic logging. El registro se habilita automáticamente al habilitar el modo de depuración o al establecer la configuración de la aplicación MS_DebugMode en True en Azure Portal.Logging is automatically enabled when you enable debug mode or set the MS_DebugMode app setting to true in the Azure portal. Los registros generados aparecerán en los registros de diagnóstico en Azure Portal.Generated logs appear in the diagnostic logs in the Azure portal.

Uso de tablas fáciles en Azure PortalWork with Easy Tables in the Azure portal

Las tablas fáciles le permiten crear y trabajar con tablas directamente en el portal.You can use Easy Tables to create and work with tables right in the portal. Puede cargar el conjunto de datos a Easy Tables en formato CSV.You can upload dataset to Easy Tables in CSV format. Tenga en cuenta que no puede usar nombres de propiedades (en el conjunto de datos CSV) que estén en conflicto con los nombres de las propiedades del sistema de back-end de Mobile Apps.Note that you cannot use property names (in your CSV dataset) that conflict with system property names of the Mobile Apps back end. Los nombres de las propiedades del sistema son:The system property names are:

  • createdAtcreatedAt
  • updatedAtupdatedAt
  • deleteddeleted
  • versionversion

Incluso puede editar las operaciones de tabla mediante el editor de App Service.You can even edit table operations by using App Service Editor. Al seleccionar Tablas fáciles en la configuración del sitio del back-end, puede agregar, modificar o eliminar una tabla.When you select Easy tables in your back-end site settings, you can add, modify, or delete a table. También puede ver los datos de la tabla.You can also see data in the table.

Trabajo con tablas fáciles

Los siguientes comandos están disponibles en la barra de comandos para una tabla:The following commands are available on the command bar for a table:

  • Cambiar permisos: modifica el permiso para leer, insertar, actualizar y eliminar operaciones en la tabla.Change permissions: Modify the permission for read, insert, update, and delete operations on the table. Las opciones son permitir el acceso anónimo, requerir autenticación o deshabilitar todos los accesos a la operación.Options are to allow anonymous access, to require authentication, or to disable all access to the operation.
  • Editar script: el archivo de script de la tabla se abre en el editor de App Service.Edit script: The script file for the table is opened in App Service Editor.
  • Administrar esquema: agrega o elimina columnas o cambia el índice de tabla.Manage schema: Add or delete columns, or change the table index.
  • Borrar tabla: trunca una tabla existente eliminando todas las filas de datos pero dejando el esquema sin cambiar.Clear table: Truncate an existing table by deleting all data rows but leaving the schema unchanged.
  • Eliminar filas: elimina filas individuales de datos.Delete rows: Delete individual rows of data.
  • Ver registros de streaming: le conecta con el servicio de registro de streaming de su sitio.View streaming logs: Connect to the streaming log service for your site.

Trabajo con API fáciles en Azure PortalWork with Easy APIs in the Azure portal

Puede usar las API fáciles para crear y trabajar con API personalizadas directamente en el portal.You can use Easy APIs to create and work with custom APIs right in the portal. Incluso puede editar scripts de API mediante el editor de App Service.You can edit API scripts by using App Service Editor.

Al seleccionar API fáciles en la configuración del sitio del back-end, puede agregar un nuevo punto de conexión de API personalizado, así como modificar o eliminar un punto de conexión de API existente.When you select Easy APIs in your back-end site settings, you can add, modify, or delete a custom API endpoint.

Trabajo con API fáciles

En el portal, puede cambiar los permisos de acceso para una acción de HTTP, editar el archivo de script de API en el editor de App Service o ver los registros de streaming.In the portal, you can change the access permissions for an HTTP action, edit the API script file in App Service Editor, or view the streaming logs.

Edición de código en el editor de App ServiceEdit code in App Service Editor

Azure Portal le permite editar los archivos de script de back-end de Node.js en el editor de App Service sin tener que descargar el proyecto en el equipo local.By using the Azure portal, you can edit your Node.js back-end script files in App Service Editor without having to download the project to your local computer. Para editar archivos de script en el editor en línea:To edit script files in the online editor:

  1. En el panel para el back-end de Mobile Apps, seleccione Todas las configuraciones y la opción Tablas fáciles o API fáciles.In pane for your Mobile Apps back end, select All settings > either Easy tables or Easy APIs. Seleccione una tabla o API y, después, seleccione Editar script.Select a table or API, and then select Edit script. El archivo de script se abre en el Editor de App Service.The script file opens in App Service Editor.

    Editor de App Service

  2. Realice los cambios en el archivo de código en el editor en línea.Make your changes to the code file in the online editor. Los cambios se guardan automáticamente a medida que se escriben.Changes are saved automatically as you type.