5

我正在使用 Windows Azure 部署我编写的 node.js 应用程序,该应用程序向客户端公开了一个相当简单的 REST CRUD api。它托管在 Windows Azure 网站上,并通过 Windows Azure 商店与 mongoose 一起使用 MongoDB。我对服务发出的请求是 JSON,响应是 JSON(不确定这很重要,但其他人已经谈到了对 Content-Type 为 application/json 的请求的 400 个响应)

在很长一段时间内第一次访问时,应用程序会返回 400 Bad Request 而不会失败。只要我通过经常点击它来保持应用程序“温暖”(至少每分钟一次左右) - 我似乎再也不会得到这个了。

托管扩展设置无关紧要 - 我在免费层上得到与保留模式相同的东西。

还有人看到这个吗?

4

2 回答 2

1

为了保证访问 node.js 中的任何连接,您必须将所有需要连接的代码放在回调中。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(...);
}
于 2013-07-25T07:15:37.450 回答
0

如果您有一个代码片段会很有帮助,但我的猜测是您与 mongo 的连接是异步发生的,并且您的站点在连接实际打开之前正在处理请求。

我测试了这种情况,但无法重现该问题。你可以在这里看到我的代码:https ://github.com/ntotten/azure-mongo-sample

基本上,我使用猫鼬进行连接,并且在加载应用程序时立即发生连接。你可以看到下面的代码。

应用程序.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);

...

任务列表.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 回答