UnityWebRequest.downloadHandler返回null,同时从Node Server获得响应

时间:2017-04-08 10:10:21

标签: c# node.js mongodb unity3d unity5

我正在Unity上创建注册场景。在后端我有MongoDB的NodeJS服务器。注册成功,数据也保存在Mongo上。

这是注册

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

这是我在Unity C#

中的 POST 协同例程
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);
        }
    }
}

我正在尝试Debug.Log(www.downloadHandler.text);,但我得到NullReferenceException

我想问一下,我正在使用的方式来回复我的api中的回复吗?如果是,我如何在Unity方面使用该响应。

2 个答案:

答案 0 :(得分:9)

创建UnityWebRequest.Post新实例的

UnityWebRequest.GetUnityWebRequest和其他UnityWebRequest functions会自动附加DownloadHandlerBuffer。< / p>

现在,如果您使用UnityWebRequest构造函数创建UnityWebRequest的新实例,DownloadHandler 将附加到该新实例。您必须使用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);
        }
    }
}

答案 1 :(得分:0)

您简单地需要附加DownloadHandlerBuffer,您不需要新的UnityWebRequest!

DownloadHandlerBuffer dH = new DownloadHandlerBuffer(); www.downloadHandler = dH;