fullstack-apollo-express-postgresql-boilerplate
fullstack-apollo-express-postgresql-boilerplate copied to clipboard
Base64 encoding of date fails
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:
- Windows 10 with WSL Ubuntu 18.04.1 LTS
- Node v10.14.1
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
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())
@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