5

私はWindowsAzureを使用して、かなり単純なRESTCRUDAPIをクライアントに公開する自分が作成したnode.jsアプリケーションをデプロイしています。Windows Azure Webサイトでホストされ、Mongooseを使用してWindowsAzureストアからMongoDBを使用します。私がサービスに対して行っているリクエストはJSONであり、応答はJSONです(重要かどうかはわかりませんが、他の人はContent-Type of application / jsonのリクエストに対して約400の応答について話しました)

久しぶりのアクセスで、アプリケーションは必ず400BadRequestを返します。頻繁に(少なくとも1分に1回程度)アプリケーションをヒットして「ウォーム」に保つ限り、これを二度と取得することはないようです。

ホスティングのスケーリング設定は関係ありません。フリーティアでも予約モードと同じものが得られます。

他の誰かがこれを見ましたか?

4

2 に答える 2

1

node.jsの接続へのアクセスを保証するには、接続を必要とするすべてのコードをコールバック内に配置する必要があります。マングースがこの接続を公開する方法は、イベントを介したものです。イベント「open」がマングース接続によって呼び出されると、データベース接続にアクセスできます。

IE

mongoose.connect('details');

mongoose.on('open', function () {
  var connection = mongoose.connection;

  // Do things with your connection here
  doThings(connection);
});

function doThings(connection) {
  app.get(...);
}
于 2013-07-25T07:15:37.450 に答える
0

コードスニペットがあれば便利ですが、mongoへの接続は非同期で行われており、接続が実際に開かれる前にサイトがリクエストを処理していると思います。

このシナリオをテストしましたが、問題を再現できませんでした。ここで私のコードを見ることができます:https ://github.com/ntotten/azure-mongo-sample

基本的に、私はマングースを使用して接続していますが、アプリが読み込まれるとすぐに接続が行われます。以下のコードを見ることができます。

app.js:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var TaskList = require('./routes/tasklist');
var taskList = new TaskList(process.env.CUSTOMCONNSTR_MONGOLAB_URI);

...

tasklist.js:

var mongoose = require('mongoose')
  , task = require('../models/task.js');


module.exports = TaskList;


function TaskList(connection) {
  mongoose.connect(connection);
}

...
于 2013-04-01T22:34:39.887 に答える