UnityWebRequest.downloadHandler returns null, receiving a response from Node Server

I am creating a registration scene on Unity. On the backend, I have a NodeJS server with MongoDB. Registration was successful and data is also saved to Mongo.

This is my NodeJS api for register

api.post('/register', (req,res) => { Account.register(new Account({username: req.body.username}), req.body.password, function(err, account){ console.log("acc: "+account); if(err){ if (err.name == "UserExistsError") { console.log("User Exists"); return res.status(409).send(err); }else { console.log("User Error 500"); return res.status(500).send(err); } }else { let newUser = new User(); newUser.accountid = account._id; newUser.name = req.body.fullname; newUser.gender = req.body.gender; newUser.role = req.body.role; newUser.country = req.body.country; newUser.coins = req.body.coins; newUser.save(err => { if(err){ console.log(err); return res.send(err); }else{ console.log('user saved'); res.json({ message: 'User saved' }); } }); passport.authenticate( 'local', { session: false })(req,res, () => { res.json({ registermsg: 'Successfully created new account'}); }); } }); }); 

And this is my POST routine in Unity C #

 IEnumerator Post(string b) { byte[] bytes = System.Text.Encoding.ASCII.GetBytes(b); using (UnityWebRequest www = new UnityWebRequest(BASE_URL, UnityWebRequest.kHttpVerbPOST)) { UploadHandlerRaw uH = new UploadHandlerRaw(bytes); www.uploadHandler = uH; www.SetRequestHeader("Content-Type", "application/json"); yield return www.Send(); if (www.isError) { Debug.Log(www.error); } else { lbltext.text = "User Registered"; Debug.Log(www.ToString()); Debug.Log(www.downloadHandler.text); } } } 

I am trying Debug.Log(www.downloadHandler.text); but I get a NullReferenceException .

I would like to ask if I use to return the answer in my api correctly? If so, how can I use this answer in the Unity side.

+5
source share
1 answer

UnityWebRequest.Post , UnityWebRequest.Get and other UnityWebRequest functions that create a new instance of UnityWebRequest will automatically UnityWebRequest DownloadHandlerBuffer to it.

Now, if you create a new instance of UnityWebRequest with the UnityWebRequest constructor, the DownloadHandler not attached to this new instance. You must manually do this with DownloadHandlerBuffer .

 IEnumerator Post(string b) { byte[] bytes = System.Text.Encoding.ASCII.GetBytes(b); using (UnityWebRequest www = new UnityWebRequest(BASE_URL, UnityWebRequest.kHttpVerbPOST)) { UploadHandlerRaw uH = new UploadHandlerRaw(bytes); DownloadHandlerBuffer dH = new DownloadHandlerBuffer(); www.uploadHandler = uH; www.downloadHandler = dH; www.SetRequestHeader("Content-Type", "application/json"); yield return www.Send(); if (www.isError) { Debug.Log(www.error); } else { lbltext.text = "User Registered"; Debug.Log(www.ToString()); Debug.Log(www.downloadHandler.text); } } } 
+5
source

Source: https://habr.com/ru/post/1266491/


All Articles