2013-03-19 30 views
5

İstemciye oldukça basit bir REST CRUD API'sini ortaya çıkaran bir node.js uygulamasını dağıtmak için Windows Azure kullanıyorum. Bir Windows Azure Web Sitesinde barındırılıyor ve MongoDB'yi mongoose ile Windows Azure mağazası aracılığıyla kullanıyor. Hizmete verdiğim istekler JSON ve yanıtlar JSON (önemli değil, diğerlerinin bir Content-Type uygulamasıyla/json ile 400 yanıt hakkında konuştuklarından emin değil)MongoDB ile Windows Azure'da node.js uygulamasına ilk istek 400 getiriyor

İlk erişimde uzun süre, uygulama başarısız olmadan 400 Hatalı İstek döndürür. Uygulamayı sık sık (en az bir dakika kadar) vurarak "sıcak" tuttuğum sürece - bunu bir daha asla anlayamıyorum.

Bu, barındırma ölçeklendirme ayarında önemli değil - aynı şeyi serbest modda ayrılmış modda olduğu gibi alıyorum.

Bunu gören başka biri var mı?

+4

Bu, IIS'de otomatik geri dönüşüm ile ilgili olabilir. Devre dışı bırakılırsa, barındırma işlemi geri dönüştürülür, bu nedenle herhangi bir durumu (muhtemelen mongodb bağlantınız) kaybettiniz. Bir çeşit bağlantıyı kalıcı olarak deneyebilir veya uygulamanızdaki kırık bir bağlantıdan kurtarmak için kodu kullanabilirsiniz –

+1

Günlükleri kontrol edip hata hakkında daha fazla bilgi isteyin mi? –

+0

MongoDB parçasını çalmayı denediniz mi ve ilk istekte hala 400 olup olmadığını kontrol ettiniz mi? –

cevap

1

, içinde bir bağlantı gerektirir tüm kod koymak zorunda geri arama. Mongoose'un bu bağlantıyı ortaya koyma şekli bir olaydan geçiyor. Etkinlik 'açık', firavun bağlantısı tarafından çağrıldığında, bir veritabanı bağlantısına erişebilirsiniz.

I.E.

mongoose.connect('details'); 

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

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

function doThings(connection) { 
    app.get(...); 
} 
0

Kod snippet'iniz varsa yardımcı olur, ancak tahminim mongo ile bağlantınızın senkronize olmayan bir şekilde gerçekleşmesi ve bağlantınızın gerçekten açık olması için sitenizin istekte bulunmasıdır.

Bu senaryoyu test ettim ve sorunu yeniden oluşturamadım. Kodumu burada görebilirsiniz: https://github.com/ntotten/azure-mongo-sample

Temel olarak, bağlanmak için mongoose kullanıyorum ve uygulama yüklendiğinde bağlantı hemen gerçekleşiyor. Aşağıdaki kodu görebilirsiniz.

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: node.js herhangi bağlantısına erişim garanti altına almak için

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


module.exports = TaskList; 


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

... 
+0

Teşekkürler Nathan - Yaklaşımını denedim ve hala bu konuyu yeniden deneyebilirim. Kodum burada https://github.com/timfpark/nodejs-azure-mongodb – outside2344

İlgili konular