首先请求在Windows Azure上使用MongoDB的node.js应用程序产生400个错误的请求

我正在使用Windows Azure来部署一个我写的node.js应用程序,它向客户端公开了一个相当简单的REST CRUD API。 它托pipe在Windows Azure网站中,通过Windows Azure存储与mongoose一起使用MongoDB。 我对这个服务所做的请求是JSON,而响应是JSON(不太确定,但是其他人已经对使用Content-Type应用/ json的请求进行了400次响应)

在第一次访问很长一段时间,应用程序返回400错误请求没有失败。 只要我频繁地(至less一分钟左右)地保持应用程序“温暖”,我再也看不到这个了。

在主机扩展设置上并不重要 – 我在免费层获得与保留模式相同的function。

其他人看到这个?

为了保证访问node.js中的任何连接,你必须把需要连接的所有代码放在callback中。 mongoose暴露这种联系的方式是通过一个事件。 当通过mongoose连接调用事件“打开”时,您可以访问数据库连接。

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

如果你有一个代码片段,这将是有帮助的,但我的猜测是,你的连接到mongo是asynchronous发生的,并且你的站点在连接实际打开之前服务于请求。

我testing了这种情况,不能重现这个问题。 你可以在这里看到我的代码: https : //github.com/ntotten/azure-mongo-sample

基本上,我正在使用mongoose进行连接,并在应用程序加载时马上进行连接。 你可以看到下面的代码。

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