到的Node.js应用程序在Windows Azure上用MongoDB的第一次请求产生400错误的请求
我使用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错误请求没有失败。只要我频繁地打开应用程序(至少每分钟一次)就可以保持应用程序“温暖”,我再也看不到这种应用程序。
不要紧,对承办的缩放设置 - 我得到自由层同样的事情在保留模式。
任何人看到这个?
为了保证在任何的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(...);
}
,如果你有一段代码,但我的猜测是,你的连接蒙戈是异步发生的事情,你的网站是服务请求之前的连接实际上是打开这将是有益的。
我测试这种情况下,无法生育的问题。你可以看到我的代码在这里: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);
}
...
感谢弥敦道 - 我尝试了你的方法,我仍然可以重现这个问题。我的代码在这里https://github.com/timfpark/nodejs-azure-mongodb – outside2344 2013-04-17 03:45:50
这可能与在IIS中自动回收做。如果处于非活动状态,宿主进程将被回收,因此您失去了任何状态(可能是您的mongodb连接)。您可能尝试某种连接Keepalive,或者从应用程序中断的连接中恢复代码 – 2013-03-20 17:15:15
您是否检查了日志并请求了解有关错误的更多信息? – 2013-03-25 13:36:49
您是否尝试过嘲讽MongoDB部件并检查它是否仍然在第一次请求时返回400? – 2013-03-30 16:35:38