Забыли назначить имена элементам формы. Типа, <input name="firstname" ...
.
Получать значения из формы надо внутри обработчика события submit, а не до его подключения (конечно, если вам нужны актуальные значения) - разместите строку const formData = new FormData(formElement);
после e.preventDefault();
.
Кстати, необязательно обращаться к переменной, ссылающейся на элемент формы, можно воспользоваться объектом события: const formData = new FormData(e.target);
.
А если заменить стрелочную функцию на обычную, то можно и так делать: const formData = new FormData(this);
.