我正在使用Windows Azure来部署我编写的node.js应用程序,该应用程序向客户端公开了一个相当简单的REST CRUD API。它托管在Windows Azure网站中,并通过带有mongoose的Windows Azure商店使用MongoDB。我对服务的请求是JSON,响应是JSON(不确定是否重要,但其他人已经讨论了400个对Content-Type of application / json请求的响应)
在很长一段时间的第一次访问中,应用程序返回400 Bad Request。只要我经常点击它(至少每分钟一次)保持应用程序“温暖” - 我似乎再也不会这样了。
主机扩展设置无关紧要 - 我在免费套餐上获得与保留模式相同的功能。
其他人见过这个吗?
答案 0 :(得分:1)
为了保证对node.js中任何连接的访问,您必须将所有需要连接的代码放在回调中。 mongoose暴露这种联系的方式是通过一个事件。当mongoose连接调用事件'open'时,您就可以访问数据库连接。
即
mongoose.connect('details');
mongoose.on('open', function () {
var connection = mongoose.connection;
// Do things with your connection here
doThings(connection);
});
function doThings(connection) {
app.get(...);
}
答案 1 :(得分:0)
如果你有一个代码片段会有所帮助,但我的猜测是你的mongo连接是异步发生的,你的网站在连接实际打开之前就是在提供请求。
我测试了这种情况,无法重现该问题。您可以在此处查看我的代码: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);
}
...