Search code examples
node.jspostgresqlexpressdatabase-connectionknex.js

Problem connecting postgreSQL with Knex - assert.fail(`unknown message code: ${code.toString(16)}`)


I'm totally new to relational databases and I'm trying to build a node and express project with postgres using knex.

I'm getting the following error when trying to connect to postgres:

/home/German/Desktop/ger/code/projects/mixr/mixr-back/node_modules/pg-protocol/src/parser.ts:202
        assert.fail(`unknown message code: ${code.toString(16)}`)
               ^
AssertionError [ERR_ASSERTION]: unknown message code: 5b
    at Parser.handlePacket (/home/German/Desktop/ger/code/projects/mixr/mixr-back/node_modules/pg-protocol/src/parser.ts:202:16)
    at Parser.parse (/home/German/Desktop/ger/code/projects/mixr/mixr-back/node_modules/pg-protocol/src/parser.ts:103:30)
    at Socket.<anonymous> (/home/German/Desktop/ger/code/projects/mixr/mixr-back/node_modules/pg-protocol/src/index.ts:7:48)
    at Socket.emit (node:events:394:28)
    at Socket.emit (node:domain:475:12)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9)
    at Socket.Readable.push (node:internal/streams/readable:228:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:199:23) {
  generatedMessage: false,
  code: 'ERR_ASSERTION',
  actual: undefined,
  expected: undefined,
  operator: 'fail'
}

I understand it's a connection problem, but I'm not sure why I'm getting this. This is my connection code:

export const knex = require('knex')({
    client: 'pg',
    connection: {
      host : 'localhost',
      port : 3306,
      user : 'notTheRealUser',
      password : 'notTheRealPassword',
      database : 'pgdb'
    }
})

knex.raw("SELECT 1").then(() => {
    console.log("PostgreSQL connected")
})
.catch((e: Error) => {
    console.log("PostgreSQL not connected")
    console.error(e)
})

And then I'm importing the Knex object on the different routes to make queries, like so:

import { knex } from '../db/db'

router.post('/register', async (req: Request, res: Response) => {

  // Check if the email isn't already taken
  try {
  const emailIsTaken = await knex('users').where({ email: req.body.email })
  if (emailIsTaken) return res.status(500).json('Email already used')

  } catch (err) {
    res.status(500).send(err)
    console.error(err)
  }

})

Full code can be found here: https://github.com/coccagerman/mixr-back


Solution

  • you are using MySQL port 3306,

    PostgresQL uses port 5432