Archives

Archives / 2013 / June
  • Azure Mobile Services: available modules

    Azure Mobile Services has documented a set of objects available in your Azure Mobile Services server side scripts at their documentation page Mobile Services server script reference. Although the documented list is a nice list of objects for the common things you want to do, it will be sooner than later that you will look for more functionality to be included in your script, especially with the new provided feature that you can now create your custom API’s. If you use GIT it is now possible to add any NPM module (node package manager module, say the NuGet of the node world), but why include a module if it is already available out of the box. And you can only use GIT with Azure Mobile Services if you are an administrator on your Azure Mobile Service, not if you are a co-administrator (will be solved in the future).

    Until now I did some trial and error experimentation to test if a certain module was available. This is easiest to do as follows:

     

    Create a custom API, for example named experiment.

    In this API use the following code:

    exports.get = function (request, response) {
        var module = "nonexistingmodule";
        var m = require(module);
        response.send(200, "Module '%s' found.", module);
    };

    You can now test your service with the following request in your browser: https://yourservice.azure-mobile.net/api/experiment

    If you get the result:

    {"code":500,"error":"Error: Internal Server Error"}

    you know that the module does not exist. In your logs you will find the following error:

    Error in script '/api/experiment.json'. Error: Cannot find module 'nonexistingmodule' [external code] at
    C:\DWASFiles\Sites\yourservice\VirtualDirectory0\site\wwwroot\App_Data\config\scripts\api\experiment.js:3:13
    [external code]

    If you require an existing (undocumented) module like the OAuth module in the following code, you will get success as a result:

    exports.get = function (request, response) {
        var module = "oauth";
        var m = require(module);
        response.send(200, "Module '" + module + "' found.");
    };

    If we look at the standard node.js documentation we see an extensive list of modules that can be used from your code. If we look at the list of files available in the Azure Mobile Services platform as documented in the blog post Azure Mobile Services: what files does it consist of? we see a folder node_modules with many more modules are used to build the Azure Mobile Services functionality on, but that can also be utilized from your server side node script code:

    • apn - An interface to the Apple Push Notification service for Node.js.
    • dpush - Send push notifications to Android devices using GCM.
    • mpns - A Node.js interface to the Microsoft Push Notification Service (MPNS) for Windows Phone.
    • wns - Send push notifications to Windows 8 devices using WNS.
    • pusher - Node library for the Pusher server API (see also: http://pusher.com/)
    • azure - Windows Azure Client Library for node.
    • express - Sinatra inspired web development framework.
    • oauth - Library for interacting with OAuth 1.0, 1.0A, 2 and Echo. Provides simplified client access and allows for construction of more complex apis and OAuth providers.
    • request - Simplified HTTP request client.
    • sax - An evented streaming XML parser in JavaScript
    • sendgrid - A NodeJS implementation of the SendGrid Api.
    • sqlserver – In node repository known as msnodesql - Microsoft Driver for Node.js for SQL Server.
    • tripwire - Break out from scripts blocking node.js event loop.
    • underscore - JavaScript's functional programming helper library.
    • underscore.string - String manipulation extensions for Underscore.js javascript library.
    • xml2js - Simple XML to JavaScript object converter.
    • xmlbuilder - An XML builder for node.js.

    As stated before, many of these modules are used to provide the functionality of Azure Mobile Services platform, and in general should not be used directly. On the other hand, I needed OAuth badly to authenticate to the new v1.1 services of Twitter, and was very happy that a require('oauth') and a few lines of code did the job.

    Based on the above modules and a lot of code in the other javascript files in the Azure Mobile Services platform a set of global objects is provided that can be used from your server side node.js script code. In future blog posts I will go into more details with respect to how this code is built-up, all starting at the node.js express entry point app.js.

  • Azure Mobile Services: what files does it consist of?

    Azure Mobile Services is a platform that provides a small set of functionality consisting of authentication, custom data tables, custom API’s, scheduling scripts and push notifications to be used as the back-end of a mobile application or if you want, any application or web site. As described in my previous post Azure Mobile Services: lessons learned the documentation on what can be used in the custom scripts is a bit minimalistic. The list below of all files the complete Azure Mobile Services platform consists of ca shed some light on what is available in the platform. In following posts I will provide more detailed information on what we can conclude from this list of files.

    Below are the available files as available in the Azure Mobile Services platform. The bold files are files that describe your data model, api scripts, scheduler scripts and table scripts. Those are the files you configure/construct to provide the “configuration”/implementation of you mobile service.

    The files are located in a folder like C:\DWASFiles\Sites\youreservice\VirtualDirectory0\site\wwwroot.

    One file is missing in the list below and that is the event log file C:\DWASFiles\Sites\youreservice\VirtualDirectory0\site\LogFiles\eventlog.xml where your messages written with for example console.log() and exception catched by the system are written.

    NOTA BENE: the Azure Mobile Services system is a system that is under full development, new releases may change the list of files.

    • ./app.js
    • ./App_Data/config/datamodel.json
    • ./App_Data/config/scripts/api/youreapi.js
    • ./App_Data/config/scripts/api/youreapi.json
    • ./App_Data/config/scripts/scheduler/placeholder
    • ./App_Data/config/scripts/scheduler/youresheduler.js
    • ./App_Data/config/scripts/shared/placeholder
    • ./App_Data/config/scripts/table/placeholder
    • ./App_Data/config/scripts/table/yourtable.insert.js
    • ./App_Data/config/scripts/table/yourtable.update.js
    • ./App_Data/config/scripts/table/yourtable.delete.js
    • ./App_Data/config/scripts/table/yourtable.read.js
    • ./node_modules/apn/index.js
    • ./node_modules/apn/lib/connection.js
    • ./node_modules/apn/lib/device.js
    • ./node_modules/apn/lib/errors.js
    • ./node_modules/apn/lib/feedback.js
    • ./node_modules/apn/lib/notification.js
    • ./node_modules/apn/lib/util.js
    • ./node_modules/apn/node_modules/q/package.json
    • ./node_modules/apn/node_modules/q/q.js
    • ./node_modules/apn/package.json
    • ./node_modules/azure/lib/azure.js
    • ./node_modules/azure/lib/cli/blobUtils.js
    • ./node_modules/azure/lib/cli/cacheUtils.js
    • ./node_modules/azure/lib/cli/callbackAggregator.js
    • ./node_modules/azure/lib/cli/cert.js
    • ./node_modules/azure/lib/cli/channel.js
    • ./node_modules/azure/lib/cli/cli.js
    • ./node_modules/azure/lib/cli/commands/account.js
    • ./node_modules/azure/lib/cli/commands/config.js
    • ./node_modules/azure/lib/cli/commands/deployment.js
    • ./node_modules/azure/lib/cli/commands/deployment_.js
    • ./node_modules/azure/lib/cli/commands/help.js
    • ./node_modules/azure/lib/cli/commands/log.js
    • ./node_modules/azure/lib/cli/commands/log_.js
    • ./node_modules/azure/lib/cli/commands/repository.js
    • ./node_modules/azure/lib/cli/commands/repository_.js
    • ./node_modules/azure/lib/cli/commands/service.js
    • ./node_modules/azure/lib/cli/commands/site.js
    • ./node_modules/azure/lib/cli/commands/site_.js
    • ./node_modules/azure/lib/cli/commands/vm.js
    • ./node_modules/azure/lib/cli/common.js
    • ./node_modules/azure/lib/cli/constants.js
    • ./node_modules/azure/lib/cli/generate-psm1-utils.js
    • ./node_modules/azure/lib/cli/generate-psm1.js
    • ./node_modules/azure/lib/cli/iaas/blobserviceex.js
    • ./node_modules/azure/lib/cli/iaas/deleteImage.js
    • ./node_modules/azure/lib/cli/iaas/image.js
    • ./node_modules/azure/lib/cli/iaas/upload/blobInfo.js
    • ./node_modules/azure/lib/cli/iaas/upload/bufferStream.js
    • ./node_modules/azure/lib/cli/iaas/upload/intSet.js
    • ./node_modules/azure/lib/cli/iaas/upload/jobTracker.js
    • ./node_modules/azure/lib/cli/iaas/upload/pageBlob.js
    • ./node_modules/azure/lib/cli/iaas/upload/streamMerger.js
    • ./node_modules/azure/lib/cli/iaas/upload/uploadVMImage.js
    • ./node_modules/azure/lib/cli/iaas/upload/vhdTools.js
    • ./node_modules/azure/lib/cli/keyFiles.js
    • ./node_modules/azure/lib/cli/patch-winston.js
    • ./node_modules/azure/lib/cli/templates/node/iisnode.yml
    • ./node_modules/azure/lib/cli/utils.js
    • ./node_modules/azure/lib/diagnostics/logger.js
    • ./node_modules/azure/lib/http/webresource.js
    • ./node_modules/azure/lib/serviceruntime/fileinputchannel.js
    • ./node_modules/azure/lib/serviceruntime/goalstatedeserializer.js
    • ./node_modules/azure/lib/serviceruntime/namedpipeinputchannel.js
    • ./node_modules/azure/lib/serviceruntime/namedpipeoutputchannel.js
    • ./node_modules/azure/lib/serviceruntime/protocol1runtimeclient.js
    • ./node_modules/azure/lib/serviceruntime/protocol1runtimecurrentstateclient.js
    • ./node_modules/azure/lib/serviceruntime/protocol1runtimegoalstateclient.js
    • ./node_modules/azure/lib/serviceruntime/roleenvironment.js
    • ./node_modules/azure/lib/serviceruntime/runtimekernel.js
    • ./node_modules/azure/lib/serviceruntime/runtimeversionmanager.js
    • ./node_modules/azure/lib/serviceruntime/runtimeversionprotocolclient.js
    • ./node_modules/azure/lib/serviceruntime/xmlcurrentstateserializer.js
    • ./node_modules/azure/lib/serviceruntime/xmlgoalstatedeserializer.js
    • ./node_modules/azure/lib/serviceruntime/xmlroleenvironmentdatadeserializer.js
    • ./node_modules/azure/lib/services/blob/blobservice.js
    • ./node_modules/azure/lib/services/blob/hmacsha256sign.js
    • ./node_modules/azure/lib/services/blob/models/blobresult.js
    • ./node_modules/azure/lib/services/blob/models/blocklistresult.js
    • ./node_modules/azure/lib/services/blob/models/containeraclresult.js
    • ./node_modules/azure/lib/services/blob/models/containerresult.js
    • ./node_modules/azure/lib/services/blob/models/leaseresult.js
    • ./node_modules/azure/lib/services/blob/models/listblobsresultcontinuation.js
    • ./node_modules/azure/lib/services/blob/models/listcontainersresultcontinuation.js
    • ./node_modules/azure/lib/services/blob/models/servicepropertiesresult.js
    • ./node_modules/azure/lib/services/blob/sharedaccesssignature.js
    • ./node_modules/azure/lib/services/blob/sharedkey.js
    • ./node_modules/azure/lib/services/blob/sharedkeylite.js
    • ./node_modules/azure/lib/services/core/connectionstringparser.js
    • ./node_modules/azure/lib/services/core/exponentialretrypolicyfilter.js
    • ./node_modules/azure/lib/services/core/linearretrypolicyfilter.js
    • ./node_modules/azure/lib/services/core/servicebusserviceclient.js
    • ./node_modules/azure/lib/services/core/servicebussettings.js
    • ./node_modules/azure/lib/services/core/serviceclient.js
    • ./node_modules/azure/lib/services/core/servicemanagementclient.js
    • ./node_modules/azure/lib/services/core/servicemanagementsettings.js
    • ./node_modules/azure/lib/services/core/servicesettings.js
    • ./node_modules/azure/lib/services/core/storageserviceclient.js
    • ./node_modules/azure/lib/services/core/storageservicesettings.js
    • ./node_modules/azure/lib/services/queue/models/listqueuesresultcontinuation.js
    • ./node_modules/azure/lib/services/queue/models/queuemessageresult.js
    • ./node_modules/azure/lib/services/queue/models/queueresult.js
    • ./node_modules/azure/lib/services/queue/models/servicepropertiesresult.js
    • ./node_modules/azure/lib/services/queue/queueservice.js
    • ./node_modules/azure/lib/services/serviceBus/models/acstokenresult.js
    • ./node_modules/azure/lib/services/serviceBus/models/queuemessageresult.js
    • ./node_modules/azure/lib/services/serviceBus/models/queueresult.js
    • ./node_modules/azure/lib/services/serviceBus/models/ruleresult.js
    • ./node_modules/azure/lib/services/serviceBus/models/subscriptionresult.js
    • ./node_modules/azure/lib/services/serviceBus/models/topicresult.js
    • ./node_modules/azure/lib/services/serviceBus/servicebusservice.js
    • ./node_modules/azure/lib/services/serviceBus/wrap.js
    • ./node_modules/azure/lib/services/serviceBus/wrapservice.js
    • ./node_modules/azure/lib/services/serviceBus/wraptokenmanager.js
    • ./node_modules/azure/lib/services/serviceManagement/models/roleparser.js
    • ./node_modules/azure/lib/services/serviceManagement/models/roleschema.json
    • ./node_modules/azure/lib/services/serviceManagement/models/servicemanagementserialize.js
    • ./node_modules/azure/lib/services/serviceManagement/servicemanagementservice.js
    • ./node_modules/azure/lib/services/table/batchserviceclient.js
    • ./node_modules/azure/lib/services/table/models/entityresult.js
    • ./node_modules/azure/lib/services/table/models/queryentitiesresultcontinuation.js
    • ./node_modules/azure/lib/services/table/models/querytablesresultcontinuation.js
    • ./node_modules/azure/lib/services/table/models/servicepropertiesresult.js
    • ./node_modules/azure/lib/services/table/models/tableresult.js
    • ./node_modules/azure/lib/services/table/sharedkeylitetable.js
    • ./node_modules/azure/lib/services/table/sharedkeytable.js
    • ./node_modules/azure/lib/services/table/tablequery.js
    • ./node_modules/azure/lib/services/table/tableservice.js
    • ./node_modules/azure/lib/util/atomhandler.js
    • ./node_modules/azure/lib/util/certificates/der.js
    • ./node_modules/azure/lib/util/certificates/pkcs.js
    • ./node_modules/azure/lib/util/constants.js
    • ./node_modules/azure/lib/util/iso8061date.js
    • ./node_modules/azure/lib/util/js2xml.js
    • ./node_modules/azure/lib/util/rfc1123date.js
    • ./node_modules/azure/lib/util/util.js
    • ./node_modules/azure/lib/util/validate.js
    • ./node_modules/azure/LICENSE.txt
    • ./node_modules/azure/node_modules/async/index.js
    • ./node_modules/azure/node_modules/async/lib/async.js
    • ./node_modules/azure/node_modules/async/LICENSE
    • ./node_modules/azure/node_modules/async/package.json
    • ./node_modules/azure/node_modules/azure/lib/azure.js
    • ./node_modules/azure/node_modules/azure/lib/diagnostics/logger.js
    • ./node_modules/azure/node_modules/azure/lib/http/webresource.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/fileinputchannel.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/goalstatedeserializer.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/namedpipeinputchannel.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/namedpipeoutputchannel.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/protocol1runtimeclient.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/protocol1runtimecurrentstateclient.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/protocol1runtimegoalstateclient.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/roleenvironment.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/runtimekernel.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/runtimeversionmanager.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/runtimeversionprotocolclient.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/xmlcurrentstateserializer.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/xmlgoalstatedeserializer.js
    • ./node_modules/azure/node_modules/azure/lib/serviceruntime/xmlroleenvironmentdatadeserializer.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/blobservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/internal/sharedaccesssignature.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/internal/sharedkey.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/internal/sharedkeylite.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/blobresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/blocklistresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/containeraclresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/containerresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/leaseresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/listblobsresultcontinuation.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/listcontainersresultcontinuation.js
    • ./node_modules/azure/node_modules/azure/lib/services/blob/models/servicepropertiesresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/connectionstringparser.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/exponentialretrypolicyfilter.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/hmacsha256sign.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/linearretrypolicyfilter.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/servicebusserviceclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/servicebussettings.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/serviceclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/servicemanagementclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/servicemanagementsettings.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/servicesettings.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/sqlserviceclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/storageserviceclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/core/storageservicesettings.js
    • ./node_modules/azure/node_modules/azure/lib/services/queue/models/listqueuesresultcontinuation.js
    • ./node_modules/azure/node_modules/azure/lib/services/queue/models/queuemessageresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/queue/models/queueresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/queue/models/servicepropertiesresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/queue/queueservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/apnsservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/gcmservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/internal/sharedaccesssignature.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/internal/wrap.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/internal/wraptokenmanager.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/acstokenresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/notificationhubresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/queuemessageresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/queueresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/registrationresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/resourceresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/ruleresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/subscriptionresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/models/topicresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/notificationhubservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/servicebusservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/servicebusservicebase.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/wnsservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceBus/wrapservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/hdinsightservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/models/roleparser.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/models/roleschema.json
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/models/servicemanagementserialize.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/servicebusmanagementservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/servicemanagementservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/serviceManagement/sqlmanagementservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/sqlAzure/models/databaseresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/sqlAzure/sqlserveracs.js
    • ./node_modules/azure/node_modules/azure/lib/services/sqlAzure/sqlservice.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/batchserviceclient.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/internal/sharedkeylitetable.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/internal/sharedkeytable.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/entityresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/listresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/queryentitiesresultcontinuation.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/querytablesresultcontinuation.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/servicepropertiesresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/models/tableresult.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/tablequery.js
    • ./node_modules/azure/node_modules/azure/lib/services/table/tableservice.js
    • ./node_modules/azure/node_modules/azure/lib/util/atomhandler.js
    • ./node_modules/azure/node_modules/azure/lib/util/constants.js
    • ./node_modules/azure/node_modules/azure/lib/util/date.js
    • ./node_modules/azure/node_modules/azure/lib/util/edmtype.js
    • ./node_modules/azure/node_modules/azure/lib/util/iso8061date.js
    • ./node_modules/azure/node_modules/azure/lib/util/js2xml.js
    • ./node_modules/azure/node_modules/azure/lib/util/odatahandler.js
    • ./node_modules/azure/node_modules/azure/lib/util/rfc1123date.js
    • ./node_modules/azure/node_modules/azure/lib/util/util.js
    • ./node_modules/azure/node_modules/azure/lib/util/validate.js
    • ./node_modules/azure/node_modules/azure/LICENSE.txt
    • ./node_modules/azure/node_modules/azure/node_modules/wns/lib/wns.js
    • ./node_modules/azure/node_modules/azure/node_modules/wns/LICENSE.txt
    • ./node_modules/azure/node_modules/azure/node_modules/wns/package.json
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/lib/xml2js.js
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/LICENSE
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/node_modules/sax/lib/sax.js
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/node_modules/sax/LICENSE
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/node_modules/sax/package.json
    • ./node_modules/azure/node_modules/azure/node_modules/xml2js/package.json
    • ./node_modules/azure/node_modules/azure/package.json
    • ./node_modules/azure/node_modules/colors/colors.js
    • ./node_modules/azure/node_modules/colors/MIT-LICENSE.txt
    • ./node_modules/azure/node_modules/colors/package.json
    • ./node_modules/azure/node_modules/commander/index.js
    • ./node_modules/azure/node_modules/commander/lib/commander.js
    • ./node_modules/azure/node_modules/commander/node_modules/keypress/index.js
    • ./node_modules/azure/node_modules/commander/node_modules/keypress/package.json
    • ./node_modules/azure/node_modules/commander/package.json
    • ./node_modules/azure/node_modules/dateformat/lib/dateformat.js
    • ./node_modules/azure/node_modules/dateformat/package.json
    • ./node_modules/azure/node_modules/easy-table/lib/table.js
    • ./node_modules/azure/node_modules/easy-table/package.json
    • ./node_modules/azure/node_modules/eyes/lib/eyes.js
    • ./node_modules/azure/node_modules/eyes/LICENSE
    • ./node_modules/azure/node_modules/eyes/package.json
    • ./node_modules/azure/node_modules/log/index.js
    • ./node_modules/azure/node_modules/log/lib/log.js
    • ./node_modules/azure/node_modules/log/package.json
    • ./node_modules/azure/node_modules/mime/LICENSE
    • ./node_modules/azure/node_modules/mime/mime.js
    • ./node_modules/azure/node_modules/mime/package.json
    • ./node_modules/azure/node_modules/mime/types/mime.types
    • ./node_modules/azure/node_modules/mime/types/node.types
    • ./node_modules/azure/node_modules/node-uuid/LICENSE.md
    • ./node_modules/azure/node_modules/node-uuid/package.json
    • ./node_modules/azure/node_modules/node-uuid/uuid.js
    • ./node_modules/azure/node_modules/qs/component.json
    • ./node_modules/azure/node_modules/qs/index.js
    • ./node_modules/azure/node_modules/qs/lib/head.js
    • ./node_modules/azure/node_modules/qs/lib/querystring.js
    • ./node_modules/azure/node_modules/qs/lib/tail.js
    • ./node_modules/azure/node_modules/qs/package.json
    • ./node_modules/azure/node_modules/qs/querystring.js
    • ./node_modules/azure/node_modules/request/aws.js
    • ./node_modules/azure/node_modules/request/forever.js
    • ./node_modules/azure/node_modules/request/LICENSE
    • ./node_modules/azure/node_modules/request/main.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/lib/form_data.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/async/index.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/async/LICENSE
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/async/package.json
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/License
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json
    • ./node_modules/azure/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json
    • ./node_modules/azure/node_modules/request/node_modules/form-data/package.json
    • ./node_modules/azure/node_modules/request/node_modules/mime/LICENSE
    • ./node_modules/azure/node_modules/request/node_modules/mime/mime.js
    • ./node_modules/azure/node_modules/request/node_modules/mime/package.json
    • ./node_modules/azure/node_modules/request/node_modules/mime/types/mime.types
    • ./node_modules/azure/node_modules/request/node_modules/mime/types/node.types
    • ./node_modules/azure/node_modules/request/oauth.js
    • ./node_modules/azure/node_modules/request/package.json
    • ./node_modules/azure/node_modules/request/tunnel.js
    • ./node_modules/azure/node_modules/request/uuid.js
    • ./node_modules/azure/node_modules/request/vendor/cookie/index.js
    • ./node_modules/azure/node_modules/request/vendor/cookie/jar.js
    • ./node_modules/azure/node_modules/sax/lib/sax.js
    • ./node_modules/azure/node_modules/sax/LICENSE
    • ./node_modules/azure/node_modules/sax/package.json
    • ./node_modules/azure/node_modules/streamline/AUTHORS
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/decompiler.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/definitions.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jsbrowser.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jsdecomp.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jsdefs.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jsexec.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jslex.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/jsparse.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/lexer.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/lib/parser.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/LICENSE
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/main.js
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/package.json
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/xfail/narcissus-failures.txt
    • ./node_modules/azure/node_modules/streamline/deps/narcissus/xfail/narcissus-slow.txt
    • ./node_modules/azure/node_modules/streamline/lib/callbacks/format.js
    • ./node_modules/azure/node_modules/streamline/lib/callbacks/require-stub.js
    • ./node_modules/azure/node_modules/streamline/lib/callbacks/runtime.js
    • ./node_modules/azure/node_modules/streamline/lib/callbacks/transform.js
    • ./node_modules/azure/node_modules/streamline/lib/compile.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/command.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/compile--fibers.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/compile.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/compile_.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/index.js
    • ./node_modules/azure/node_modules/streamline/lib/compiler/register.js
    • ./node_modules/azure/node_modules/streamline/lib/fibers/runtime.js
    • ./node_modules/azure/node_modules/streamline/lib/fibers/transform.js
    • ./node_modules/azure/node_modules/streamline/lib/fibers/walker.js
    • ./node_modules/azure/node_modules/streamline/lib/globals.js
    • ./node_modules/azure/node_modules/streamline/lib/index.js
    • ./node_modules/azure/node_modules/streamline/lib/register.js
    • ./node_modules/azure/node_modules/streamline/lib/require/client/require.js
    • ./node_modules/azure/node_modules/streamline/lib/require/server/depend.js
    • ./node_modules/azure/node_modules/streamline/lib/require/server/require.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/client/streams--fibers.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/client/streams.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/client/streams_.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/jsonRequest.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/readers.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/server/httpHelper.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/server/streams.js
    • ./node_modules/azure/node_modules/streamline/lib/streams/streams.js
    • ./node_modules/azure/node_modules/streamline/lib/tools/docTool.js
    • ./node_modules/azure/node_modules/streamline/lib/transform.js
    • ./node_modules/azure/node_modules/streamline/lib/util/flows--fibers.js
    • ./node_modules/azure/node_modules/streamline/lib/util/flows.js
    • ./node_modules/azure/node_modules/streamline/lib/util/flows_.js
    • ./node_modules/azure/node_modules/streamline/lib/util/future.js
    • ./node_modules/azure/node_modules/streamline/lib/util/index.js
    • ./node_modules/azure/node_modules/streamline/lib/util/url.js
    • ./node_modules/azure/node_modules/streamline/lib/util/uuid.js
    • ./node_modules/azure/node_modules/streamline/module.js
    • ./node_modules/azure/node_modules/streamline/package.json
    • ./node_modules/azure/node_modules/tunnel/index.js
    • ./node_modules/azure/node_modules/tunnel/lib/tunnel.js
    • ./node_modules/azure/node_modules/tunnel/package.json
    • ./node_modules/azure/node_modules/underscore/index.js
    • ./node_modules/azure/node_modules/underscore/LICENSE
    • ./node_modules/azure/node_modules/underscore/package.json
    • ./node_modules/azure/node_modules/underscore/underscore.js
    • ./node_modules/azure/node_modules/underscore.string/lib/underscore.string.js
    • ./node_modules/azure/node_modules/underscore.string/package.json
    • ./node_modules/azure/node_modules/validator/index.js
    • ./node_modules/azure/node_modules/validator/lib/defaultError.js
    • ./node_modules/azure/node_modules/validator/lib/entities.js
    • ./node_modules/azure/node_modules/validator/lib/filter.js
    • ./node_modules/azure/node_modules/validator/lib/index.js
    • ./node_modules/azure/node_modules/validator/lib/validator.js
    • ./node_modules/azure/node_modules/validator/lib/validators.js
    • ./node_modules/azure/node_modules/validator/lib/xss.js
    • ./node_modules/azure/node_modules/validator/LICENSE
    • ./node_modules/azure/node_modules/validator/package.json
    • ./node_modules/azure/node_modules/validator/validator.js
    • ./node_modules/azure/node_modules/winston/lib/winston/common.js
    • ./node_modules/azure/node_modules/winston/lib/winston/config/cli-config.js
    • ./node_modules/azure/node_modules/winston/lib/winston/config/npm-config.js
    • ./node_modules/azure/node_modules/winston/lib/winston/config/syslog-config.js
    • ./node_modules/azure/node_modules/winston/lib/winston/config.js
    • ./node_modules/azure/node_modules/winston/lib/winston/container.js
    • ./node_modules/azure/node_modules/winston/lib/winston/exception.js
    • ./node_modules/azure/node_modules/winston/lib/winston/logger.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports/console.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports/file.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports/http.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports/transport.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports/webhook.js
    • ./node_modules/azure/node_modules/winston/lib/winston/transports.js
    • ./node_modules/azure/node_modules/winston/lib/winston.js
    • ./node_modules/azure/node_modules/winston/LICENSE
    • ./node_modules/azure/node_modules/winston/node_modules/cycle/cycle.js
    • ./node_modules/azure/node_modules/winston/node_modules/cycle/package.json
    • ./node_modules/azure/node_modules/winston/node_modules/pkginfo/lib/pkginfo.js
    • ./node_modules/azure/node_modules/winston/node_modules/pkginfo/package.json
    • ./node_modules/azure/node_modules/winston/node_modules/request/aws.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/aws2.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/forever.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/LICENSE
    • ./node_modules/azure/node_modules/winston/node_modules/request/main.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/mimetypes.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/oauth.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/package.json
    • ./node_modules/azure/node_modules/winston/node_modules/request/tunnel.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/uuid.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/vendor/cookie/index.js
    • ./node_modules/azure/node_modules/winston/node_modules/request/vendor/cookie/jar.js
    • ./node_modules/azure/node_modules/winston/node_modules/stack-trace/lib/stack-trace.js
    • ./node_modules/azure/node_modules/winston/node_modules/stack-trace/License
    • ./node_modules/azure/node_modules/winston/node_modules/stack-trace/package.json
    • ./node_modules/azure/node_modules/winston/package.json
    • ./node_modules/azure/node_modules/xml2js/lib/xml2js.js
    • ./node_modules/azure/node_modules/xml2js/LICENSE
    • ./node_modules/azure/node_modules/xml2js/package.json
    • ./node_modules/azure/node_modules/xmlbuilder/lib/index.js
    • ./node_modules/azure/node_modules/xmlbuilder/lib/XMLBuilder.js
    • ./node_modules/azure/node_modules/xmlbuilder/lib/XMLFragment.js
    • ./node_modules/azure/node_modules/xmlbuilder/package.json
    • ./node_modules/azure/package.json
    • ./node_modules/dpush/lib/dpush.js
    • ./node_modules/dpush/LICENSE.txt
    • ./node_modules/dpush/package.json
    • ./node_modules/express/.npmignore
    • ./node_modules/express/.travis.yml
    • ./node_modules/express/bin/express
    • ./node_modules/express/History.md
    • ./node_modules/express/index.js
    • ./node_modules/express/lib/application.js
    • ./node_modules/express/lib/express.js
    • ./node_modules/express/lib/middleware.js
    • ./node_modules/express/lib/request.js
    • ./node_modules/express/lib/response.js
    • ./node_modules/express/lib/router/index.js
    • ./node_modules/express/lib/router/route.js
    • ./node_modules/express/lib/utils.js
    • ./node_modules/express/lib/view.js
    • ./node_modules/express/LICENSE
    • ./node_modules/express/Makefile
    • ./node_modules/express/node_modules/buffer-crc32/.npmignore
    • ./node_modules/express/node_modules/buffer-crc32/.travis.yml
    • ./node_modules/express/node_modules/buffer-crc32/index.js
    • ./node_modules/express/node_modules/buffer-crc32/package.json
    • ./node_modules/express/node_modules/buffer-crc32/README.md
    • ./node_modules/express/node_modules/buffer-crc32/tests/crc.test.js
    • ./node_modules/express/node_modules/commander/.npmignore
    • ./node_modules/express/node_modules/commander/.travis.yml
    • ./node_modules/express/node_modules/commander/History.md
    • ./node_modules/express/node_modules/commander/index.js
    • ./node_modules/express/node_modules/commander/lib/commander.js
    • ./node_modules/express/node_modules/commander/Makefile
    • ./node_modules/express/node_modules/commander/package.json
    • ./node_modules/express/node_modules/commander/Readme.md
    • ./node_modules/express/node_modules/connect/.npmignore
    • ./node_modules/express/node_modules/connect/.travis.yml
    • ./node_modules/express/node_modules/connect/index.js
    • ./node_modules/express/node_modules/connect/lib/cache.js
    • ./node_modules/express/node_modules/connect/lib/connect.js
    • ./node_modules/express/node_modules/connect/lib/index.js
    • ./node_modules/express/node_modules/connect/lib/middleware/basicAuth.js
    • ./node_modules/express/node_modules/connect/lib/middleware/bodyParser.js
    • ./node_modules/express/node_modules/connect/lib/middleware/compress.js
    • ./node_modules/express/node_modules/connect/lib/middleware/cookieParser.js
    • ./node_modules/express/node_modules/connect/lib/middleware/cookieSession.js
    • ./node_modules/express/node_modules/connect/lib/middleware/csrf.js
    • ./node_modules/express/node_modules/connect/lib/middleware/directory.js
    • ./node_modules/express/node_modules/connect/lib/middleware/errorHandler.js
    • ./node_modules/express/node_modules/connect/lib/middleware/favicon.js
    • ./node_modules/express/node_modules/connect/lib/middleware/json.js
    • ./node_modules/express/node_modules/connect/lib/middleware/limit.js
    • ./node_modules/express/node_modules/connect/lib/middleware/logger.js
    • ./node_modules/express/node_modules/connect/lib/middleware/methodOverride.js
    • ./node_modules/express/node_modules/connect/lib/middleware/multipart.js
    • ./node_modules/express/node_modules/connect/lib/middleware/query.js
    • ./node_modules/express/node_modules/connect/lib/middleware/responseTime.js
    • ./node_modules/express/node_modules/connect/lib/middleware/session/cookie.js
    • ./node_modules/express/node_modules/connect/lib/middleware/session/memory.js
    • ./node_modules/express/node_modules/connect/lib/middleware/session/session.js
    • ./node_modules/express/node_modules/connect/lib/middleware/session/store.js
    • ./node_modules/express/node_modules/connect/lib/middleware/session.js
    • ./node_modules/express/node_modules/connect/lib/middleware/static.js
    • ./node_modules/express/node_modules/connect/lib/middleware/staticCache.js
    • ./node_modules/express/node_modules/connect/lib/middleware/timeout.js
    • ./node_modules/express/node_modules/connect/lib/middleware/urlencoded.js
    • ./node_modules/express/node_modules/connect/lib/middleware/vhost.js
    • ./node_modules/express/node_modules/connect/lib/patch.js
    • ./node_modules/express/node_modules/connect/lib/proto.js
    • ./node_modules/express/node_modules/connect/lib/public/directory.html
    • ./node_modules/express/node_modules/connect/lib/public/error.html
    • ./node_modules/express/node_modules/connect/lib/public/favicon.ico
    • ./node_modules/express/node_modules/connect/lib/public/icons/page.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_add.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_attach.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_code.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_copy.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_delete.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_edit.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_error.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_excel.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_find.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_gear.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_go.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_green.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_key.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_link.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_paste.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_red.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_save.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_word.png
    • ./node_modules/express/node_modules/connect/lib/public/icons/page_world.png
    • ./node_modules/express/node_modules/connect/lib/public/style.css
    • ./node_modules/express/node_modules/connect/lib/utils.js
    • ./node_modules/express/node_modules/connect/LICENSE
    • ./node_modules/express/node_modules/connect/node_modules/bytes/.npmignore
    • ./node_modules/express/node_modules/connect/node_modules/bytes/component.json
    • ./node_modules/express/node_modules/connect/node_modules/bytes/History.md
    • ./node_modules/express/node_modules/connect/node_modules/bytes/index.js
    • ./node_modules/express/node_modules/connect/node_modules/bytes/Makefile
    • ./node_modules/express/node_modules/connect/node_modules/bytes/package.json
    • ./node_modules/express/node_modules/connect/node_modules/bytes/Readme.md
    • ./node_modules/express/node_modules/connect/node_modules/formidable/.npmignore
    • ./node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml
    • ./node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/example/json.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/example/post.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/index.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/json_parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/octet_parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/LICENSE
    • ./node_modules/express/node_modules/connect/node_modules/formidable/package.json
    • ./node_modules/express/node_modules/connect/node_modules/formidable/Readme.md
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/common.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/beta-sticker-1.png
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/binaryfile.tar.gz
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/blank.gif
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/menu_separator.png
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/encoding.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/misc.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/preamble.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/workarounds.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-json.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-octet-stream.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/run.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/standalone/test-connection-aborted.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/standalone/test-content-transfer-encoding.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/standalone/test-issue-46.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/tools/base64.html
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-file.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js
    • ./node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js
    • ./node_modules/express/node_modules/connect/node_modules/pause/.npmignore
    • ./node_modules/express/node_modules/connect/node_modules/pause/History.md
    • ./node_modules/express/node_modules/connect/node_modules/pause/index.js
    • ./node_modules/express/node_modules/connect/node_modules/pause/Makefile
    • ./node_modules/express/node_modules/connect/node_modules/pause/package.json
    • ./node_modules/express/node_modules/connect/node_modules/pause/Readme.md
    • ./node_modules/express/node_modules/connect/node_modules/qs/.gitmodules
    • ./node_modules/express/node_modules/connect/node_modules/qs/.npmignore
    • ./node_modules/express/node_modules/connect/node_modules/qs/index.js
    • ./node_modules/express/node_modules/connect/node_modules/qs/package.json
    • ./node_modules/express/node_modules/connect/node_modules/qs/Readme.md
    • ./node_modules/express/node_modules/connect/package.json
    • ./node_modules/express/node_modules/connect/test.js
    • ./node_modules/express/node_modules/cookie/.npmignore
    • ./node_modules/express/node_modules/cookie/.travis.yml
    • ./node_modules/express/node_modules/cookie/index.js
    • ./node_modules/express/node_modules/cookie/package.json
    • ./node_modules/express/node_modules/cookie/README.md
    • ./node_modules/express/node_modules/cookie/test/mocha.opts
    • ./node_modules/express/node_modules/cookie/test/parse.js
    • ./node_modules/express/node_modules/cookie/test/serialize.js
    • ./node_modules/express/node_modules/cookie-signature/.npmignore
    • ./node_modules/express/node_modules/cookie-signature/History.md
    • ./node_modules/express/node_modules/cookie-signature/index.js
    • ./node_modules/express/node_modules/cookie-signature/Makefile
    • ./node_modules/express/node_modules/cookie-signature/package.json
    • ./node_modules/express/node_modules/cookie-signature/Readme.md
    • ./node_modules/express/node_modules/debug/.npmignore
    • ./node_modules/express/node_modules/debug/component.json
    • ./node_modules/express/node_modules/debug/debug.js
    • ./node_modules/express/node_modules/debug/example/app.js
    • ./node_modules/express/node_modules/debug/example/browser.html
    • ./node_modules/express/node_modules/debug/example/wildcards.js
    • ./node_modules/express/node_modules/debug/example/worker.js
    • ./node_modules/express/node_modules/debug/History.md
    • ./node_modules/express/node_modules/debug/index.js
    • ./node_modules/express/node_modules/debug/lib/debug.js
    • ./node_modules/express/node_modules/debug/package.json
    • ./node_modules/express/node_modules/debug/Readme.md
    • ./node_modules/express/node_modules/fresh/.npmignore
    • ./node_modules/express/node_modules/fresh/index.js
    • ./node_modules/express/node_modules/fresh/Makefile
    • ./node_modules/express/node_modules/fresh/package.json
    • ./node_modules/express/node_modules/fresh/Readme.md
    • ./node_modules/express/node_modules/methods/index.js
    • ./node_modules/express/node_modules/methods/package.json
    • ./node_modules/express/node_modules/mkdirp/.npmignore
    • ./node_modules/express/node_modules/mkdirp/.travis.yml
    • ./node_modules/express/node_modules/mkdirp/examples/pow.js
    • ./node_modules/express/node_modules/mkdirp/index.js
    • ./node_modules/express/node_modules/mkdirp/LICENSE
    • ./node_modules/express/node_modules/mkdirp/package.json
    • ./node_modules/express/node_modules/mkdirp/README.markdown
    • ./node_modules/express/node_modules/mkdirp/test/chmod.js
    • ./node_modules/express/node_modules/mkdirp/test/clobber.js
    • ./node_modules/express/node_modules/mkdirp/test/mkdirp.js
    • ./node_modules/express/node_modules/mkdirp/test/perm.js
    • ./node_modules/express/node_modules/mkdirp/test/perm_sync.js
    • ./node_modules/express/node_modules/mkdirp/test/race.js
    • ./node_modules/express/node_modules/mkdirp/test/rel.js
    • ./node_modules/express/node_modules/mkdirp/test/return.js
    • ./node_modules/express/node_modules/mkdirp/test/return_sync.js
    • ./node_modules/express/node_modules/mkdirp/test/root.js
    • ./node_modules/express/node_modules/mkdirp/test/sync.js
    • ./node_modules/express/node_modules/mkdirp/test/umask.js
    • ./node_modules/express/node_modules/mkdirp/test/umask_sync.js
    • ./node_modules/express/node_modules/range-parser/.npmignore
    • ./node_modules/express/node_modules/range-parser/History.md
    • ./node_modules/express/node_modules/range-parser/index.js
    • ./node_modules/express/node_modules/range-parser/Makefile
    • ./node_modules/express/node_modules/range-parser/package.json
    • ./node_modules/express/node_modules/range-parser/Readme.md
    • ./node_modules/express/node_modules/send/.npmignore
    • ./node_modules/express/node_modules/send/History.md
    • ./node_modules/express/node_modules/send/index.js
    • ./node_modules/express/node_modules/send/lib/send.js
    • ./node_modules/express/node_modules/send/lib/utils.js
    • ./node_modules/express/node_modules/send/Makefile
    • ./node_modules/express/node_modules/send/node_modules/mime/LICENSE
    • ./node_modules/express/node_modules/send/node_modules/mime/mime.js
    • ./node_modules/express/node_modules/send/node_modules/mime/package.json
    • ./node_modules/express/node_modules/send/node_modules/mime/README.md
    • ./node_modules/express/node_modules/send/node_modules/mime/test.js
    • ./node_modules/express/node_modules/send/node_modules/mime/types/mime.types
    • ./node_modules/express/node_modules/send/node_modules/mime/types/node.types
    • ./node_modules/express/node_modules/send/package.json
    • ./node_modules/express/node_modules/send/Readme.md
    • ./node_modules/express/package.json
    • ./node_modules/express/Readme.md
    • ./node_modules/mpns/lib/mpns.js
    • ./node_modules/mpns/package.json
    • ./node_modules/oauth/index.js
    • ./node_modules/oauth/lib/oauth.js
    • ./node_modules/oauth/lib/oauth2.js
    • ./node_modules/oauth/lib/sha1.js
    • ./node_modules/oauth/lib/_utils.js
    • ./node_modules/oauth/LICENSE
    • ./node_modules/oauth/package.json
    • ./node_modules/pusher/index.js
    • ./node_modules/pusher/lib/pusher.js
    • ./node_modules/pusher/node_modules/request/aws.js
    • ./node_modules/pusher/node_modules/request/aws2.js
    • ./node_modules/pusher/node_modules/request/forever.js
    • ./node_modules/pusher/node_modules/request/LICENSE
    • ./node_modules/pusher/node_modules/request/main.js
    • ./node_modules/pusher/node_modules/request/mimetypes.js
    • ./node_modules/pusher/node_modules/request/oauth.js
    • ./node_modules/pusher/node_modules/request/package.json
    • ./node_modules/pusher/node_modules/request/tunnel.js
    • ./node_modules/pusher/node_modules/request/uuid.js
    • ./node_modules/pusher/node_modules/request/vendor/cookie/index.js
    • ./node_modules/pusher/node_modules/request/vendor/cookie/jar.js
    • ./node_modules/pusher/package.json
    • ./node_modules/request/forever.js
    • ./node_modules/request/LICENSE
    • ./node_modules/request/main.js
    • ./node_modules/request/mimetypes.js
    • ./node_modules/request/oauth.js
    • ./node_modules/request/package.json
    • ./node_modules/request/uuid.js
    • ./node_modules/request/vendor/cookie/index.js
    • ./node_modules/request/vendor/cookie/jar.js
    • ./node_modules/sax/lib/sax.js
    • ./node_modules/sax/LICENSE
    • ./node_modules/sax/package.json
    • ./node_modules/sendgrid/index.js
    • ./node_modules/sendgrid/lib/email.js
    • ./node_modules/sendgrid/lib/file_handler.js
    • ./node_modules/sendgrid/lib/sendgrid.js
    • ./node_modules/sendgrid/lib/smtpapi_headers.js
    • ./node_modules/sendgrid/lib/validation.js
    • ./node_modules/sendgrid/MIT.LICENSE
    • ./node_modules/sendgrid/node_modules/mime/LICENSE
    • ./node_modules/sendgrid/node_modules/mime/mime.js
    • ./node_modules/sendgrid/node_modules/mime/package.json
    • ./node_modules/sendgrid/node_modules/mime/types/mime.types
    • ./node_modules/sendgrid/node_modules/mime/types/node.types
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/engines/sendmail.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/engines/ses.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/engines/smtp.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/engines/stub.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/helpers.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/nodemailer.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/transport.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/wellknown.js
    • ./node_modules/sendgrid/node_modules/nodemailer/lib/xoauth.js
    • ./node_modules/sendgrid/node_modules/nodemailer/LICENSE
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/lib/dkim.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/lib/mailcomposer.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/lib/punycode.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/lib/urlfetch.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/LICENSE
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib-noiconv/content-types.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib-noiconv/index.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib-noiconv/LICENSE
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib-noiconv/mime-functions.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib-noiconv/package.json
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/mailcomposer/package.json
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/index.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/lib/client.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/lib/pool.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/lib/server.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/lib/starttls.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/LICENSE
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/cert/cert.pem
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/cert/key.pem
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/lib/mockup.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/lib/rai.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/lib/starttls.js
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/LICENSE
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/package.json
    • ./node_modules/sendgrid/node_modules/nodemailer/node_modules/simplesmtp/package.json
    • ./node_modules/sendgrid/node_modules/nodemailer/package.json
    • ./node_modules/sendgrid/node_modules/step/lib/step.js
    • ./node_modules/sendgrid/node_modules/step/package.json
    • ./node_modules/sendgrid/node_modules/underscore/index.js
    • ./node_modules/sendgrid/node_modules/underscore/LICENSE
    • ./node_modules/sendgrid/node_modules/underscore/package.json
    • ./node_modules/sendgrid/node_modules/underscore/underscore.js
    • ./node_modules/sendgrid/package.json
    • ./node_modules/sqlserver/lib/sql.js
    • ./node_modules/sqlserver/lib/sqlserver.native.js
    • ./node_modules/sqlserver/lib/sqlserver.node
    • ./node_modules/sqlserver/package.json
    • ./node_modules/tripwire/lib/native/windows/x86/tripwire.node
    • ./node_modules/tripwire/lib/tripwire.js
    • ./node_modules/tripwire/LICENSE.txt
    • ./node_modules/tripwire/package.json
    • ./node_modules/underscore/LICENSE
    • ./node_modules/underscore/package.json
    • ./node_modules/underscore/underscore.js
    • ./node_modules/underscore.string/lib/underscore.string.js
    • ./node_modules/underscore.string/package.json
    • ./node_modules/wns/lib/wns.js
    • ./node_modules/wns/LICENSE.txt
    • ./node_modules/wns/package.json
    • ./node_modules/xml2js/lib/xml2js.js
    • ./node_modules/xml2js/LICENSE
    • ./node_modules/xml2js/node_modules/sax/lib/sax.js
    • ./node_modules/xml2js/node_modules/sax/LICENSE
    • ./node_modules/xml2js/node_modules/sax/package.json
    • ./node_modules/xml2js/package.json
    • ./node_modules/xmlbuilder/lib/index.js
    • ./node_modules/xmlbuilder/lib/XMLBuilder.js
    • ./node_modules/xmlbuilder/lib/XMLFragment.js
    • ./node_modules/xmlbuilder/package.json
    • ./runtime/core.js
    • ./runtime/filehelpers.js
    • ./runtime/jsonwebtoken.js
    • ./runtime/logger.js
    • ./runtime/logwriter.js
    • ./runtime/metrics.js
    • ./runtime/query/expressions.js
    • ./runtime/query/expressionvisitor.js
    • ./runtime/query/queryparser.js
    • ./runtime/request/authentication/facebook.js
    • ./runtime/request/authentication/google.js
    • ./runtime/request/authentication/microsoftaccount.js
    • ./runtime/request/authentication/twitter.js
    • ./runtime/request/dataoperation.js
    • ./runtime/request/datapipeline.js
    • ./runtime/request/html/corshelper.js
    • ./runtime/request/html/crossdomainhandler.js
    • ./runtime/request/html/templates/crossdomainbridge.html
    • ./runtime/request/html/templates/loginviaiframe.html
    • ./runtime/request/html/templates/loginviaiframereceiver.html
    • ./runtime/request/html/templates/loginviapostmessage.html
    • ./runtime/request/html/templating.js
    • ./runtime/request/loginhandler.js
    • ./runtime/request/middleware/allowHandler.js
    • ./runtime/request/middleware/authenticate.js
    • ./runtime/request/middleware/authorize.js
    • ./runtime/request/middleware/bodyParser.js
    • ./runtime/request/middleware/errorHandler.js
    • ./runtime/request/middleware/requestLimit.js
    • ./runtime/request/request.js
    • ./runtime/request/requesthandler.js
    • ./runtime/request/schedulerhandler.js
    • ./runtime/request/statushandler.js
    • ./runtime/request/tablehandler.js
    • ./runtime/resources.js
    • ./runtime/script/apibuilder.js
    • ./runtime/script/metadata.js
    • ./runtime/script/push/notify-apns.js
    • ./runtime/script/push/notify-gcm.js
    • ./runtime/script/push/notify-mpns.js
    • ./runtime/script/push/notify-wns.js
    • ./runtime/script/push/notify.js
    • ./runtime/script/scriptcache.js
    • ./runtime/script/scripterror.js
    • ./runtime/script/scriptloader.js
    • ./runtime/script/scriptmanager.js
    • ./runtime/script/scriptstate.js
    • ./runtime/script/sqladapter.js
    • ./runtime/script/table.js
    • ./runtime/server.js
    • ./runtime/statuscodes.js
    • ./runtime/storage/sqlbooleanizer.js
    • ./runtime/storage/sqlformatter.js
    • ./runtime/storage/sqlhelpers.js
    • ./runtime/storage/storage.js
    • ./runtime/Zumo.Node.js
    • ./static/client/MobileServices.Web-1.0.0.js
    • ./static/client/MobileServices.Web-1.0.0.min.js
    • ./static/default.htm
    • ./static/robots.txt
    • ./Web.config
  • Azure Mobile Services: lessons learned

    When I first started using Azure Mobile Services I thought of it as a nice way to:

    • authenticate my users - login using Twitter, Google, Facebook, Windows Live
    • create tables, and use the client code to create the columns in the table because that is not possible in the Azure Mobile Services UI
    • run some Javascript code on the table crud actions (Insert, Update, Delete, Read)
    • schedule a Javascript to run any 15 or more minutes

    I had no idea of the magic that was happening inside…

    • where is the data stored? Is it a kind of big table, are relationships between tables possible?
    • those Javascripts on the table crud actions, is that interpreted, what is that exactly?

    After working for some time with Azure Mobile Services I became a lot wiser:

    • Those tables are just normal tables in an Azure SQL Server 2012
    • Creating the table columns through client code sucks, at least from my Javascript code, because the columns are deducted from the sent JSON data, and a datetime field is sent as string in JSON, so a string type column is created instead of a datetime column
    • You can connect with SQL Management Studio to the Azure SQL Server, and although you can’t manage your columns through the SQL Management Studio UI, it is possible to just run SQL scripts to drop and create tables and indices
    • When you create a table through SQL script, add the table with the same name in the Azure Mobile Services UI to hook it up and be able to access the table through the provided abstraction layer
    • You can also go to the SQL Database through the Azure Mobile Services UI, and from there get in a web based SQL management studio where you can create columns and manage your data
    • The table crud scripts and the scheduler scripts are full blown node.js scripts, introducing a lot of power with great performance
    • The web based script editor is really powerful, I do most of my editing currently in the editor which has syntax highlighting and code completing. While editing the code JsHint is used for script validation.
    • The documentation on Azure Mobile Services is… suboptimal. It is such a pity that there is no way to comment on it so the community could fill in the missing holes, like which node modules are already loaded, and which modules are available on Azure Mobile Services.

    Soon I was hacking away on Azure Mobile Services, creating my own database tables through script, and abusing the read script of an empty table named query to implement my own set of “services”.

    The latest updates to Azure Mobile Services described in the following posts added some great new features like creating web API’s, use shared code from your scripts, command line tools for managing Azure Mobile Services (upload and download scripts for example), support for node modules and git support:

    In the mean time I rewrote all my “service-like” table scripts to API scripts, which works like a breeze.

    Bad thing with the current state of Azure Mobile Services is that the git support is not working if you are a co-administrator of your Azure subscription, and not and administrator (as in my case). Another bad thing is that Cross Origin Request Sharing (CORS) is not supported for the API yet, so no go yet from the browser client for API’s, which is my case. See http://social.msdn.microsoft.com/Forums/windowsazure/en-US/2b79c5ea-d187-4c2b-823a-3f3e0559829d/known-limitations-for-source-control-and-custom-api-features for more on these and other limitations.

    In his talk at Build 2013 Josh Twist showed that there is a work-around for accessing shared script code from the table scripts as well (another limitation mentioned in the post above). I could not find that code in the Votabl2 code example from the presentation at https://github.com/joshtwist/votabl2, but we can grab it from the presentation when it comes online on Channel9.

    By the way: you can always express your needs and ideas at http://mobileservices.uservoice.com, that’s the place they are listening to (I hope!).