Acho que seu código está certo , mas o trycatch n vai te retornar um erro se o usuario n existir , entende , coloquei um exemplo pratico mais abaixo

try { const response = await fetch("http://localhost:4000/api/login", { method: "POST", body: JSON.stringify(formData) }); } catch (error) { console.error("Erro ao fazer login:", error); }

O ideal seria =>
FRONT
try{
        const response = await fetch("http://localhost:4000/api/login", {
          method: "POST",
          body: JSON.stringify(formData)
        });
        const status =  response.status
    
        if(status=== 200){
             console.log("login com sucesso")
             return 
         }
         console.log("falha ao fazer o login",status)
        
         }catch(err){
         console.log(err)
         }

BACK

.post('/api/login',async(req,res)=>{
    const {name,password,email} = req.body
    
    if( !name || ! password || !email )return res.status( 400 ).send({message:'Missing fields'})
     
   res.status(200).send({message: "Successful login"});
   })