0

Ich migriere meine App vom alten azure-Mobilfunkdienst zum neuen azure-App-Dienst.azure-Skript für mobile Dienste (Blob-Upload) in den azure-App-Dienst migrieren

Und im alten azurblauen mobilen Dienst verwende ich dieses Tabellenskript, um es in meine Bildtabelle einzufügen.

var azure = require('azure'); 
var qs = require('querystring'); 
var appSettings = require('mobileservice-config').appSettings; 

function insert(item, user, request) { 
// Get storage account settings from app settings. 
var accountName = appSettings.STORAGE_ACCOUNT_NAME; 
var accountKey = appSettings.STORAGE_ACCOUNT_ACCESS_KEY; 
var host = accountName + '.blob.core.windows.net'; 

if ((typeof context.item.containerName !== "undefined") && (
context.item.containerName !== null)) { 
    // Set the BLOB store container name on the item, which must be lowercase. 
    context.item.containerName = context.item.containerName.toLowerCase(); 

    // If it does not already exist, create the container 
    // with public read access for blobs.   
    var blobService = azure.createBlobService(accountName, accountKey, host); 
    blobService.createContainerIfNotExists(context.item.containerName, { 
     publicAccessLevel: 'blob' 
    }, function (error) { 
     if (!error) { 

      // Provide write access to the container for the next 5 mins.   
      var sharedAccessPolicy = { 
       AccessPolicy: { 
        Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.WRITE, 
        Expiry: new Date(new Date().getTime() + 5 * 60 * 1000) 
       } 
      }; 

      // Generate the upload URL with SAS for the new image. 
      var sasQueryUrl = 
      blobService.generateSharedAccessSignature(context.item.containerName, 
      context.item.resourceName, sharedAccessPolicy); 

      // Set the query string. 
      context.item.sasQueryString = qs.stringify(sasQueryUrl.queryString); 

      // Set the full path on the new new item, 
      // which is used for data binding on the client. 
      item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path; 

     } else { 
      console.error(error); 
     } 
     context.execute(); 
    }); 
} else { 
    context.execute(); 
} 
} 

zu migrieren, ich habe es für den neuen App-Dienst neu zu schreiben,

var table = module.exports = require('azure-mobile-apps').table(); 
var azure = require('azure'); 
var qs = require('querystring'); 
var appSettings = require('mobileservice-config').appSettings; 

function insertPhoto(context) { 
// Get storage account settings from app settings. 
var accountName = appSettings.STORAGE_ACCOUNT_NAME; 
var accountKey = appSettings.STORAGE_ACCOUNT_ACCESS_KEY; 
var host = accountName + '.blob.core.windows.net'; 

if ((typeof context.item.containerName !== "undefined") && (
context.item.containerName !== null)) { 
    // Set the BLOB store container name on the item, which must be lowercase. 
    context.item.containerName = context.item.containerName.toLowerCase(); 

    // If it does not already exist, create the container 
    // with public read access for blobs.   
    var blobService = azure.createBlobService(accountName, accountKey, host); 
    blobService.createContainerIfNotExists(context.item.containerName, { 
     publicAccessLevel: 'blob' 
    }, function (error) { 
     if (!error) { 

      // Provide write access to the container for the next 5 mins.   
      var sharedAccessPolicy = { 
       AccessPolicy: { 
        Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.WRITE, 
        Expiry: new Date(new Date().getTime() + 5 * 60 * 1000) 
       } 
      }; 

      // Generate the upload URL with SAS for the new image. 
      var sasQueryUrl = 
      blobService.generateSharedAccessSignature(context.item.containerName, 
      context.item.resourceName, sharedAccessPolicy); 

      // Set the query string. 
      context.item.sasQueryString = qs.stringify(sasQueryUrl.queryString); 

      // Set the full path on the new new item, 
      // which is used for data binding on the client. 
      item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path; 

     } else { 
      console.error(error); 
     } 
     context.execute(); 
    }); 
} else { 
    context.execute(); 
} 
}; 

table.insert(insertPhoto); 

Jedoch, wenn ich es ausführen, bekam ich einen internen Server-Fehler, Fehler zu sagen: Kann nicht Modul ‚zu‘

finden

Dies ist die komplette Fehlerprotokoll:

2016-05-09T19:02:06 Welcome, you are now connected to log-streaming service. 
2016-05-09T19:02:23.812Z - �[31merror�[39m: Unable to load D:\home\site\wwwroot\tables\photos.js Error: Cannot find module 'azure' 
at Function.Module._resolveFilename (module.js:337:15) 
at Function.Module._load (module.js:287:25) 
at Module.require (module.js:366:17) 
at require (module.js:385:17) 
at Object.<anonymous> 
(D:\home\site\wwwroot\tables\photos.js:11:13) 
at Module._compile (module.js:435:26) 
at Object.Module._extensions..js (module.js:442:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:311:12) 
at Module.require (module.js:366:17) 
at require (module.js:385:17) 

Mon May 09 2016 19:02:23 GMT+0000 (Coordinated Universal Time): Application has thrown an uncaught exception and is terminated: 
Error: Cannot find module 'azure' 
at Function.Module._resolveFilename (module.js:337:15) 
at Function.Module._load (module.js:287:25) 
at Module.require (module.js:366:17) 
at require (module.js:385:17) 
at Object.<anonymous> 
    (D:\home\site\wwwroot\tables\photos.js:11:13) 
    at Module._compile (module.js:435:26) 
    at Object.Module._extensions..js (module.js:442:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:311:12) 
    at Module.require (module.js:366:17) 
    at require (module.js:385:17) 
    Application has thrown an uncaught exception and is terminated: 
    Error: Cannot find module 'azure' 
    at Function.Module._resolveFilename (module.js:337:15) 
    at Function.Module._load (module.js:287:25) 
    at Module.require (module.js:366:17) 
    at require (module.js:385:17) 
    at Object.<anonymous> 
     (D:\home\site\wwwroot\tables\photos.js:11:13) 
     at Module._compile (module.js:435:26) 
     at Object.Module._extensions..js (module.js:442:10) 
     at Module.load (module.js:356:32) 
     at Function.Module._load (module.js:311:12) 
     at Module.require (module.js:366:17) 
     at require (module.js:385:17) 
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <title>IIS Detailed Error - 500.1002 - Internal Server Error</title> 
      <style type="text/css"> 
     </head> 
     <body> 
      <div id="content"> 
       <div class="content-container"> 
        <h3>HTTP Error 500.1002 - Internal Server Error</h3> 
        <h4>The page cannot be displayed because an internal server error has occurred.</h4> 
       </div> 
       <div class="content-container"> 
        <fieldset> 
         <h4>Most likely causes:</h4> 
         <ul> <li>IIS received the request; however, an internal error occurred during the processing of the request. The root cause of this error depends on which module handles the request and what was happening in the worker process when this error occurred.</li> <li>IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS permissions are set incorrectly.</li> <li>IIS was not able to process configuration for the Web site or application.</li>  <li>The authenticated user does not have permission to use this DLL.</li> <li>The request is mapped to a managed handler but the .NET Extensibility Feature is not installed.</li> </ul> 
        </fieldset> 
       </div> 
       <div class="content-container"> 
        <fieldset> 
         <h4>Things you can try:</h4> 
         <ul> <li>Ensure that the NTFS permissions for the web.config file are correct and allow access to the Web server's machine account.</li>  <li>Check the event logs to see if any additional information was logged.</li> <li>Verify the permissions for the DLL.</li> <li>Install the .NET Extensibility feature if the request is mapped to a managed handler.</li> <li>Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click <a href="http://go.microsoft.com/fwlink/?LinkID=66439">here</a>. </li> </ul> 
        </fieldset> 
       </div> 

       <div class="content-container"> 
        <fieldset> 
         <h4>Detailed Error Information:</h4> 
         <div id="details-left"> 
          <table border="0" cellpadding="0" cellspacing="0"> 
           <tr class="alt"><th>Module</th><td>&nbsp;&nbsp;&nbsp;iisnode</td></tr> 
           <tr><th>Notification</th><td>&nbsp;&nbsp;&nbsp;ExecuteRequestHandler</td></tr> 
           <tr class="alt"><th>Handler</th><td>&nbsp;&nbsp;&nbsp;iisnode</td></tr> 
           <tr><th>Error Code</th><td>&nbsp;&nbsp;&nbsp;0x00000002</td></tr> 

          </table> 
         </div> 
         <div id="details-right"> 
          <table border="0" cellpadding="0" cellspacing="0"> 
           <tr class="alt"><th>Requested URL</th><td>&nbsp;&nbsp;&nbsp;http://selfiecontestdev:80/app.js</td></tr> 
           <tr><th>Physical Path</th><td>&nbsp;&nbsp;&nbsp;D:\home\site\wwwroot\app.js</td></tr> 
           <tr class="alt"><th>Logon Method</th><td>&nbsp;&nbsp;&nbsp;Anonymous</td></tr> 
           <tr><th>Logon User</th><td>&nbsp;&nbsp;&nbsp;Anonymous</td></tr> 

          </table> 
          <div class="clear"></div> 
         </div> 
        </fieldset> 
       </div> 

       <div class="content-container"> 
        <fieldset> 
         <h4>More Information:</h4> 
         This error means that there was a problem while processing the request. The request was received by the Web server, but during processing a fatal error occurred, causing the 500 error. 
         <p><a href="http://go.microsoft.com/fwlink/?LinkID=62293&amp;IIS70Error=500,1002,0x00000002,9200">View more information &raquo;</a></p> 
         <p>Microsoft Knowledge Base Articles:</p> 


        </fieldset> 
       </div> 
      </div> 
     </body> 
    </html> 
    {"level":1,"message":"request","timestamp":1462820578207,"responseTime":0,"method":"POST","path":"/dev/api/telemetry/wwwroot/","statusCode":201} 
    2016-05-09T19:04:06 No new trace in the past 1 min(s). 

Dose jemand wissen, was ich sollte die s zu beheben tun kript? Danke im Voraus!

+0

Haben Sie das Azure SDK für Knoten in Ihrer neuen App Services-Anwendung installiert, bevor Sie 'require ('azure')' '? –

+0

Hallo @ GaryLiu-MSFT danke für die Antwort, aber wie mache ich das? Kann ich es einfach über das azure Online Portal installieren? –

+0

Hallo @Vincent, jedes Update? –

Antwort

1

Da die Architektur von Mobile Apps von Mobile Services geändert wurde, werden die mobilen Apps jetzt zu Azure App Services migriert.

Eigentlich ist das Mobile Apps-Backend in Node.js ein Expressjs-Projekt und die mobile app sdk for node ist eine Middleware von Express.

So können Sie Ihre mobile App auf lokale herunterladen (siehe How to: Download the Node.js backend quickstart code project using Git), können wir package.json Datei in Ihrer Anwendung Stammverzeichnis nutzen die NodeJS Module, die Sie benötigen, zu halten, dann implementieren über git Azure und Azure App-Service wird installieren die Abhängigkeiten über die Deployment-Aufgabe. Sie können auf Using Node.js Modules with Azure applications für mehr verweisen.

In der Zwischenzeit können Sie die Kudu Console-Site oder die Visual Studio Online-Erweiterung nutzen, um das Nodejs-Modul schnell online zu installieren. Sie können sich auf die Antwort von How to run django manage.py command on Azure App Service für die allgemeine Idee dieser Online-Tools beziehen.

Alle weiteren Bedenken, bitte zögern Sie nicht, lassen Sie es mich wissen.