As I was building the platform for my online course I had the problem of generating a few thousands unique URLs.

Every person taking the course will be assigned a unique URL. The backend knows about all those URLs and maps a valid URL to the course content.

I wanted a unique URL because I can associate a URL to a purchase email.

In this way, I can avoid having a login, and at the same time having a separate URL for each person lets me block eventual abuse if that URL gets unintentionally or intentionally shared in the public.

So I set out to write my Node.js script.

I used the randomstring package, and I added numbers to a Set object until I got the number I wanted. Using a Set means every string will be unique because calling add and passing a duplicate string will silently do nothing.

I made a generateStrings() function that returns the set:

const generateStrings = (numberOfStrings, stringLength) => {
  const randomstring = require('randomstring')
  const s = new Set()

  while (s.size < numberOfStrings) {
    s.add(randomstring.generate(stringLength))
  }

  return s
}

I can call it using

const strings = generateStrings(100, 20)

where 100 is the number of strings I want, and 20 is the length of each string.

Once we get the set, we can iterate over them using the values() Set method:

for (const value of strings.values()) {
  console.log(value)
}