0

アプリを古い azure モバイル サービスから新しい 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);

ただし、実行すると、「エラー: モジュール 'azure' が見つかりません」という内部サーバー エラーが発生しました。

完全なエラー ログは次のとおりです。

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

スクリプトを修正するために何をすべきか知っている人はいますか? ありがとうございます!

4

1 に答える 1

1

モバイル アプリのアーキテクチャがモバイル サービスから変更されたため、モバイル アプリは Azure App Services に移行されました。

実はNode.jsのモバイルアプリバックエンドはexpressjsプロジェクトで、node用のモバイルアプリSDKはexpressのミドルウェアです。

したがって、モバイル アプリをローカルにダウンロードできます (方法: Git を使用して Node.js バックエンド クイックスタート コード プロジェクトをダウンロードする を参照) package.json。 git、および Azure App Service は、デプロイ タスクを介して依存関係をインストールします。詳細については、「 Azure アプリケーションで Node.js モジュールを使用する」を参照してください。

一方、Kudu コンソール サイトまたは Visual Studio オンライン拡張機能を利用して、nodejs モジュールをオンラインですばやくインストールできます。これらのオンライン ツールの一般的な考え方については、Azure App Service で django manage.py コマンドを実行する方法の回答を参照できます。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2016-05-11T01:57:22.483 に答える