Jorge
Jorge

Reputation: 1634

Sequelize giving TypeError

So I was casually devoloping a simple node.js app and it was working in my computer just fine. I had installed heroku toolbelt and the app was running fine when I ran foreman start.
Deploying the app in heroku seems to be giving me some kind of error when conecting with postgres by using sequelize (I'm not even 100% sure that's the cause of the error, but almost). The app crashes and all I have is the heroku logs:

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

The first line ("Servidor escuchando al puerto: XXXX") is actually part of app.js (the main .js file), it's the last few lines:

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

As I said before, it runs fine locally (executing foreman start correctly displays it on localhost) but I've had no luck on heroku. Thanks for any insight and help =)

EDIT: I've managed to trace somewhat the error, seems there is a call to:

pg.types.setTypeParser(20, String)

somewhere in the sequelize module that throws the error since pg.types is undefined I've checked by simply doing:

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

And it indeed seems there is no field "types" Is that the way it's meant to be? Am I missing something?

Upvotes: 2

Views: 919

Answers (1)

Samuel Neff
Samuel Neff

Reputation: 74909

pg.types comes from a dependency of pg:

See package json here:

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

This is the package here:

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

If you don't have it and you installed pg through npm, try removing pg and re-running npm install and see if there are any errors. It should download pg-types tool.

You can see where pg.types specifically is defined here:

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

Upvotes: 1

Related Questions