gpt4 book ai didi

node.js - MongoDB 与 MongoLab 的连接在 Heroku 上的 NodeJS 中超时

转载 作者:可可西里 更新时间:2023-11-01 09:34:55 24 4
gpt4 key购买 nike

起初一切正常,我可以通过发布到/upload 路由成功存储数据。但在 120 秒不活动后,超时事件将触发,并且以后存储数据的尝试将失败。但是,不会调用回调,因此日志中没有 "Unable to insert..." 消息。

var express = require('express');
var bodyParser = require('body-parser');
var winston = require('winston');
var config = require('./config');
var MongoClient = require('mongodb').MongoClient;

var app = express();

app.use(bodyParser.json());

app.post('/upload', function (req, res) {
req.json({status: 'recieved'});
req.app.locals.db.collection('data').insertOne(req.body, function(err, result) {
if (err === null) {
winston.info('Successfully inserted', {data: req.body});
} else {
winston.warn('Unable to insert', {cause: err});
}
});
});

const options = {
server: {
socketOptions: {
keepAlive: 1,
autoReconnect: true,
connectTimeoutMS: 5000
}
}
};

MongoClient.connect(config.databaseURI, function(err, db) {
if (err !== null) {
winston.error('Could not connect to database', {cause: err});
return;
}

db.on('timeout', function (err) {
winston.error('Mongo timed out', {cause: err});
});

app.locals.db = db;
app.listen(config.port, function() {
winston.info('Listening on port %d', config.port);
});
});

我的代码大致基于 this example .有人建议我在每次请求后打开一个到数据库的新连接,但是这个 is not best practice因为在内部,MongoClient.connect 正在管理一个池。我还尝试根据 this 更改一些选项.仍然没有运气。

最佳答案

这解决了我的问题:

var options = { 
server: {
socketOptions: {
keepAlive: 300000, connectTimeoutMS: 30000
}
},
replset: {
socketOptions: {
keepAlive: 300000,
connectTimeoutMS : 30000
}
}
};

然后把它放在这里:

if(process.env.MONGODB_URI) {
mongoose.connect(process.env.MONGODB_URI, options);
} else {

// Connect to local database

}

关于node.js - MongoDB 与 MongoLab 的连接在 Heroku 上的 NodeJS 中超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com