2017-04-08 69 views
5

'dan yanıt alınırken null döndürüyor Unity'de bir Kayıt Sahnesi oluşturuyorum. Arka uçta MongoDB ile NodeJS sunucum var. Kayıt başarılı ve veriler Mongo'ya da kaydedilir.UnityWebRequest.downloadHandler, Node Server

Bu kayıt

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'}); 
     }); 
    } 
}); 
}); 

benim NodeJS API Ve bu Birlik 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); 
     } 
    } 
} 

Ben Debug.Log(www.downloadHandler.text); çalışıyorum ama NullReferenceException olsun benim SONRASI eş rutindir.

Sormak istediklerim, api'mdeki yanıtı doğru şekilde kullanmak için kullanıyorum mı? Evet ise, bu cevabı Birlik tarafında nasıl kullanabilirim?

cevap

5

UnityWebRequest.Post, UnityWebRequest.Get ve UnityWebRequest yeni bir örneğini oluşturur diğer UnityWebRequestfunctions, otomatik DownloadHandlerBuffer ona bağlı olacaktır. Eğer UnityWebRequest kurucu ile UnityWebRequest yeni örneği oluşturursanız

Şimdi, DownloadHandler yeni örneğine bağlı değil olduğunu. Bunu DownloadHandlerBuffer ile manuel olarak yapmanız gerekir.

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); 
     } 
    } 
} 
+0

Teşekkürler, 'DownloadHandlerBuffer' kullanma konusunda kafam karıştı. Ama şimdi "Başlıkları gönderildikten sonra gönderemiyorum." Çok sorularım var ama kodlarımın kendi başına çalışmasını sağlayamadım. –

+0

Başlığı "UnityWebRequest.downloadHandler dönen null" olarak yeniden adlandırmayı planlıyorum. Bu, bu problemle karşılaşacak birçok kişiye yardımcı olacaktır. Yeni başlık sorununuz için yeni bir soru oluşturmak güzel olurdu. Problemin ne olduğunu açıklarsan daha iyi olur. – Programmer

+0

Tamam, soruyu değiştireceğim. –