Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 查询后的回调函数较慢时mongodb连接超时_Node.js_Mongodb_Express_Mongoose_Timeout - Fatal编程技术网

Node.js 查询后的回调函数较慢时mongodb连接超时

Node.js 查询后的回调函数较慢时mongodb连接超时,node.js,mongodb,express,mongoose,timeout,Node.js,Mongodb,Express,Mongoose,Timeout,我正在开发一个web应用程序的后端。服务器端,节点与express和mongo(通过mongoose)一起使用 客户端可以发出post请求,该请求执行以下操作: 从mongo加载某些数据的文件位置 加载文件并用它做一些繁重的工作 将结果发送到客户端 这是由一个如下所示的函数完成的: function (req, res, next) { // read relevant info from req object, e.g. var id = req.body.id; mySc

我正在开发一个web应用程序的后端。服务器端,节点与express和mongo(通过mongoose)一起使用

客户端可以发出post请求,该请求执行以下操作:

  • 从mongo加载某些数据的文件位置
  • 加载文件并用它做一些繁重的工作
  • 将结果发送到客户端
这是由一个如下所示的函数完成的:

function (req, res, next) {

  // read relevant info from req object, e.g.
  var id = req.body.id;

  mySchema.findById(id, (err, doc) => {

      fs.readFile(doc.location, function (err, data) {

        // do some heavy work with data

        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');

        var bodyContent = [];
        // fill bodyContent

        res.write(JSON.stringify(bodyContent));
        res.end();

      });

  });

};
这适用于小文件,但当文件变大且“繁重工作”的计算需要更长时间才能执行时,mongo会抛出连接超时错误:

Error: connection timeout
at Db.<anonymous> (<project path>/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:169:17)
at emitTwo (events.js:106:13)
at Db.emit (events.js:191:7)
at Server.listener (<project path>/node_modules/mongoose/node_modules/mongodb/lib/db.js:1798:14)
at emitOne (events.js:96:13)
at Server.emit (events.js:188:7)
at Server.<anonymous> (<project path>/node_modules/mongoose/node_modules/mongodb/lib/server.js:274:14)
at emitOne (events.js:96:13)
at Server.emit (events.js:188:7)
at Pool.<anonymous> (<project path>/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:335:12)
at emitOne (events.js:96:13)
at Pool.emit (events.js:188:7)
at Connection.<anonymous> (<project path>/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:270:12)
at Connection.g (events.js:291:16)
at emitTwo (events.js:106:13)
at Connection.emit (events.js:191:7)
at Socket.<anonymous> (<project path>/node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:185:10)
at Socket.g (events.js:291:16)
at emitNone (events.js:86:13)
at Socket.emit (events.js:185:7)
at Socket._onTimeout (net.js:339:8)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
错误:连接超时
在分贝,但没有用。解决这一问题的最佳途径是什么


更新:

更仔细地研究这个问题,一个可能的解决方案似乎是在回调开始时断开Mongo,例如通过
mongoose.connection.close()
并在
res.end()
行之前重新连接,类似于
mongoose.connect(config)
。然而,我还没有找到一种方法来做到这一点,即当有多个请求传入时,它可以正常工作。有什么想法吗