0

我正在將我的應用從舊azure移動服務遷移到新的azure應用服務。將azure移動服務表腳本(Blob上傳)遷移到azure應用服務

而在舊的azure移動服務中,我使用這個表腳本插入到我的圖像表中。

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

要遷移,我把它改寫爲新的應用服務,

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

然而,當我執行它,我得到了一個內部服務器錯誤,說錯誤:找不到模塊「蔚藍」

下面是完整的錯誤日誌:

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

劑量任何人都知道我應該做些什麼來解決的S CRIPT?先謝謝了!

+0

在使用'require('azure')''之前,您是否在新的App Services應用程序中安裝了節點的Azure SDK? –

+0

嗨@ GaryLiu-MSFT謝謝你的回覆,但我該怎麼做?有沒有一種方法可以使用Azure在線門戶進行安裝? –

+0

Hi @Vincent,有沒有更新? –

回答

1

由於移動應用程序的體系結構已從移動服務改爲移動應用程序,因此現在移動應用程序遷移到Azure應用程序服務。

事實上,Node.js中的移動應用程序後端是expressjs項目,而mobile app sdk for node是express的中間件。

所以,你可以下載移動應用進行本地(指How to: Download the Node.js backend quickstart code project using Git),我們可以利用package.json文件在應用程序的根目錄,以保持你所需要的的NodeJS模塊,然後部署通過混帳到Azure和Azure的應用服務將安裝通過部署任務的依賴關係。你可以參考Using Node.js Modules with Azure applications瞭解更多。

同時,您可以利用Kudu Console站點或Visual Studio在線擴展在線快速安裝nodejs模塊。您可以參考How to run django manage.py command on Azure App Service的答案瞭解這些在線工具的一般概念。

任何進一步的關注,請隨時讓我知道。