UnityWebRequest.downloadHandler 从节点服务器获取响应时返回空值

UnityWebRequest.downloadHandler returning null, while getting response from Node Server

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

这是我的 NodeJS api 用于 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'});
      });
  }
});
});

这是我在 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中return回复的方式是否正确?如果是,我如何在 Unity 端使用该响应。

UnityWebRequest.PostUnityWebRequest.Get 和其他创建 UnityWebRequest 新实例的 UnityWebRequest 将自动附加 DownloadHandlerBuffer .

现在,如果您使用 UnityWebRequest constructor, DownloadHandler is not attached to that new instance. You have to manually do that with DownloadHandlerBuffer 创建 UnityWebRequest 的新实例。

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

你只需要附加一个 DownloadHandlerBuffer ,你不需要一个新的 UnityWebRequest!

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