查询发送错误的Sequelize错误:读取ECONNRESET

时间:2017-04-08 20:46:49

标签: node.js postgresql nodes sequelize.js

PostgreSQL 9.6.2我从node.js / express.js应用程序发送查询。

sequelize提供doc how to make the query,这个例子是findAll。

我试着做同样的例子。

console.log('user id: ', req.decoded);
db.orders.findAll({where: {userId: req.decoded.id}})
    .then(function (orders) {
        console.log('orders from db: ', orders);
    })
    .catch(function (err) {
        console.log('orders request error from db: ', err);
    });
console.log('end of function');

控制台日志:

user id:  { id: 2 }
end of function
orders request error from db:  { SequelizeConnectionError: read ECONNRESET
    at D:\NodeJSProjects\ParkingHouse\node_modules\sequelize\lib\dialects\postgres\connection-manager.js:110:20
    at Connection.<anonymous> (D:\NodeJSProjects\ParkingHouse\node_modules\pg\lib\client.js:186:5)
    at emitOne (events.js:96:13)
    at Connection.emit (events.js:188:7)
    at Socket.<anonymous> (D:\NodeJSProjects\ParkingHouse\node_modules\pg\lib\connection.js:86:10)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1278:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
  name: 'SequelizeConnectionError',
  message: 'read ECONNRESET',
  parent: 
   { Error: read ECONNRESET
       at exports._errnoException (util.js:1022:11)
       at TCP.onread (net.js:569:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' },
  original: 
   { Error: read ECONNRESET
       at exports._errnoException (util.js:1022:11)
       at TCP.onread (net.js:569:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } }

一段时间后,请求重复,然后我从db获取数据。 我发现了类似的主题Node js ECONNRESET,但我没有找到答案。

  1. 为什么db关闭连接?以及如何修复它。

3 个答案:

答案 0 :(得分:1)

你正在失去联系。可能你没有在你的框架中调用next()。或者不要关闭交易。 这种结构没有意义:

.then(function (foundUser) {
      return foundUser;
  }).catch(function (err) {
    //get here the exception
    return err;
  });

删除它。然后将控制器重写为

const user = await authorize(req);
if (!user) {
    res.status(401).send('Authorization required');
    return next();
}
res.status(200).send('All ok');
next();

如果出错,您的框架应自动为您提供500。如果你想手动处理它,请使用try {await Promise} catch(err){} 如果您使用的东西还不支持等待/异步,请查看http://koajs.com/

答案 1 :(得分:1)

问题在于防病毒F-Secure,改变它并且一切正常。 一些问题: https://community.f-secure.com/t5/Business/DeepGuard-seems-to-cause/td-p/88447

答案 2 :(得分:0)

我今天有类似的错误

{ 
 error: {
   Error: write ECONNRESET at WriteWrap.afterWrite (net.js:788:14) errno: 'ECONNRESET',
   code: 'ECONNRESET', syscall: 'write'
 } 
}

您需要设置数据库的最大池,或者避免同时发送多个。

这里有一个github线程可以为您提供帮助。