the-road-to-graphql / fullstack-apollo-express-postgresql-boilerplate

💥 A sophisticated GraphQL with Apollo, Express and PostgreSQL boilerplate project.
https://roadtoreact.com
MIT License
1.2k stars 265 forks source link

Base64 encoding of date fails #46

Open andersnylund opened 5 years ago

andersnylund commented 5 years ago

The following functions caused me problems:

const toCursorHash = string => Buffer.from(string).toString('base64');
const fromCursorHash = string => (Buffer.from(string, 'base64').toString('utf-8');

Apparently the createdAt object passed to toCursorHash() was not of type string. I got the following error message:

TypeError [ERR_INVALID_ARG_TYPE]: The "value" argument must not be of type number. Received type number

Tested what type of the string is with javascripts typeof, and it revealed it to be of type object.

I fixed it with

const toCursorHash = string => Buffer.from(JSON.stringify(string)).toString('base64');
const fromCursorHash = string => JSON.parse(Buffer.from(string, 'base64').toString('utf-8'));

However, I'm curious of why this happened and why it appears to work for others as in the book.

Setup:

rwieruch commented 5 years ago

Uh that's odd. I know that I fixed something for this subject before I released the book and hoped that everything should be alright now. Wondering whether anyone else ran into this issue.

CC @tmstani23 @pmosconi

pmosconi commented 5 years ago

It looks strange to me too. I'm using node 8.11.3 and it works correctly without having to stringify the string. Maybe check if what you are hashing is really a string, i.e.: endCursor: toCursorHash(edges[edges.length - 1].createdAt.toString())

tmstani23 commented 5 years ago

@andersnylund I used the following code and it works fine, I'm in windows 7 with node version 11.4.0

const toCursorHash = string => Buffer.from(string).toString('base64'); const fromCursorHash = string => Buffer.from(string, 'base64').toString('ascii');

cc:: @rwieruch