Sequelize给出TypeError

时间:2014-01-05 11:38:01

标签: node.js postgresql heroku sequelize.js

所以我随便开发了一个简单的node.js应用程序,它在我的电脑上工作就好了。 我安装了 heroku toolbelt ,当我运行 foreman start 时,应用程序运行正常。
在heroku中部署应用程序似乎在使用 sequelize 与postgres进行协调时会给我一些错误(我甚至不确定这是导致错误的原因,但差不多)。应用程序崩溃,我所拥有的是heroku日志:

2014-01-05T11:07:39.850661+00:00 app[web.1]: Servidor escuchando al puerto: 25144
2014-01-05T11:07:39.911641+00:00 app[web.1]: 
2014-01-05T11:07:39.912039+00:00 app[web.1]: timers.js:103
2014-01-05T11:07:39.912288+00:00 app[web.1]:             if (!process.listeners('uncaughtException').length) throw e;
2014-01-05T11:07:39.913123+00:00 app[web.1]:                                                                       ^
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at TransactionManager.getConnectorManager (/app/node_modules/sequelize/lib/transaction-manager.js:25:36)
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at TransactionManager.query (/app/node_modules/sequelize/lib/transaction-manager.js:39:15)
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at module.exports.Sequelize.query (/app/node_modules/sequelize/lib/sequelize.js:310:36)
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at null.<anonymous> (/app/node_modules/sequelize/lib/query-interface.js:901:40)
2014-01-05T11:07:39.915970+00:00 app[web.1]: TypeError: Cannot call method 'setTypeParser' of undefined
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at new module.exports.ConnectorManager (/app/node_modules/sequelize/lib/dialects/postgres/connector-manager.js:19:19)
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at module.exports.CustomEventEmitter.run (/app/node_modules/sequelize/lib/emitters/custom-event-emitter.js:24:18)
2014-01-05T11:07:39.915970+00:00 app[web.1]:     at Timer.list.ontimeout (timers.js:101:19)
2014-01-05T11:07:41.217303+00:00 heroku[web.1]: Process exited with status 1
2014-01-05T11:07:41.234281+00:00 heroku[web.1]: State changed from starting to crashed

第一行(“Servidor escuchando al puerto:XXXX”)实际上是app.js(主.js文件)的一部分,它是最后几行:

http.createServer(app).listen(app.get('port'), function(){
  console.log('Servidor escuchando al puerto: ' + app.get('port'));
});

正如我之前所说,它在本地运行正常(执行 foreman start 正确地在localhost上显示它)但是我在heroku上没有运气。 感谢您的任何见解和帮助=)

编辑:我已经设法跟踪了一些错误,似乎有一个调用:

pg.types.setTypeParser(20, String)

sequelize 模块中某处抛出错误,因为pg.types未定义 我只是做了检查:

console.log(require('pg'));

确实似乎没有字段“类型” 这是它的意思吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

pg.types来自pg

的依赖关系

请参阅包json:

https://github.com/brianc/node-postgres/blob/master/package.json

这是这里的包:

https://www.npmjs.org/package/pg-types

如果您没有,并且您通过npm安装了pg,请尝试删除pg并重新运行npm install并查看是否有任何错误。它应该下载pg-types工具。

您可以在此处查看pg.types具体定义的位置:

https://github.com/brianc/node-postgres/blob/master/lib/index.js