2013-03-19 188 views
5

我使用Windows Azure的部署,我已经写了一个Node.js应用程式暴露一个相当简单的REST API CRUD给客户。它托管在Windows Azure网站中,通过Windows Azure存储与猫鼬一起使用MongoDB。我对该服务提出的请求是JSON,响应是JSON(不确定问题,但其他人已经讨论了使用Content-Type应用程序/ json的400请求)到的Node.js应用程序在Windows Azure上用MongoDB的第一次请求产生400错误的请求

在第一次访问很长一段时间,应用程序返回400错误请求没有失败。只要我频繁地打开应用程序(至少每分钟一次)就可以保持应用程序“温暖”,我再也看不到这种应用程序。

不要紧,对承办的缩放设置 - 我得到自由层同样的事情在保留模式。

任何人看到这个?

+4

这可能与在IIS中自动回收做。如果处于非活动状态,宿主进程将被回收,因此您失去了任何状态(可能是您的mongodb连接)。您可能尝试某种连接Keepalive,或者从应用程序中断的连接中恢复代码 – 2013-03-20 17:15:15

+1

您是否检查了日志并请求了解有关错误的更多信息? – 2013-03-25 13:36:49

+0

您是否尝试过嘲讽MongoDB部件并检查它是否仍然在第一次请求时返回400? – 2013-03-30 16:35:38

回答

1

为了保证在任何的Node.js连接访问,你必须把需要内部的连接的所有代码的回调。猫鼬暴露这种联系的方式是通过一个事件。当事件'open'被猫鼬连接调用时,你可以访问数据库连接。

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

,如果你有一段代码,但我的猜测是,你的连接蒙戈是异步发生的事情,你的网站是服务请求之前的连接实际上是打开这将是有益的。

我测试这种情况下,无法生育的问题。你可以看到我的代码在这里: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); 
} 

... 
+0

感谢弥敦道 - 我尝试了你的方法,我仍然可以重现这个问题。我的代码在这里https://github.com/timfpark/nodejs-azure-mongodb – outside2344 2013-04-17 03:45:50