Search code examples
node.jspostgresqlkoa

Koa sends "Not Found" when sending postgresql query data


I'm building a microservice api using koa. This API is only used for user data. I'm pulling data from a postgresql database, no problems there. But when i try to expose the data, i get a "Not Found".

Here's the endpoint snippet, i can't find anything wrong with it, i might be blind...

router.get('/api/v1/users', (ctx) => {
  pool.connect((err, client, done) => {
    if (err) {
      ctx.response.body = { status: 500, message: 'Something went wrong' }
      console.log('Pool Connection Error: ', err)
      throw err
    }

    client.query('select * from users', (err, result) => {
      done()

      if (err) {
        ctx.response.body = { status: 500, message: 'Something went wrong' }
        console.log('Query Error: ', err)
        throw err
      }

      ctx.response.body = { status: 200, data: result.rows }
      console.log('Query Result:', result.rows)
    })
  })
})

Solution

  • I did an oopsie.. I should've just used a promise like this...

    router.get('/api/v1/users', async ctx => {
      async function getData() {
        return new Promise((resolve, reject) => {
          pool.connect((err, client, done) => {
            if (err) {
              reject({ status: 500, message: 'Something went wrong' })
              console.log('Pool Connection Error: ', err)
              throw err
            }
    
            client.query('select * from users', (err, result) => {
              done()
    
              if (err) {
                reject({ status: 500, message: 'Something went wrong' })
                console.log('Query Error: ', err)
                throw err
              }
    
              resolve({ status: 200, data: result.rows })
              console.log('Query Result:', result.rows)
            })
          })
        })
      }
    
      ctx.response.body = await getData()
    })
    

    Well, at least i hope this can help other newbies like myself