Код на стороне клиента (Unity. За кадром вызов метода, старт и Usings)
https://docs.unity3d.com/Manual/JSONSerialization.html уверяет что таким образом получается корректный JSON
[Serializable]
public class MyClass
{
public int level;
public float timeElapsed;
public string playerName;
}
public IEnumerator POST()
{
MyClass myObject = new MyClass();
myObject.level = 1;
myObject.timeElapsed = 47.5f;
myObject.playerName = "Dr Charles Francis";
string json = JsonUtility.ToJson(myObject);
WWWForm form = new WWWForm();
form.AddField("data", json);
var www = new WWW("http://127.0.0.1:8080/server.js", form);
yield return www;
Debug.Log(www.text);
www.Dispose();
yield break;
}
Код на стороне сервера(за кадром код на старт сервера и всякие require)
function accept(req, resp) {
var body = "";
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
console.log('body: ' + body);
var jsonObj = JSON.parse(body);
console.log(jsonObj.$key);
})
resp.end('Получили ответ от сервера ' + new Date() + req.url);
}
И соответствующий результат в консоли сервера
body: data=%7b%22level%22%3a1%2c%22timeElapsed%22%3a47.5%2c%22playerName%22%3a%22Dr+Charles+Francis%22%7d
undefined:1
data=%7b%22level%22%3a1%2c%22timeElapsed%22%3a47.5%2c%22playerName%22%3a%22Dr+Charles+Francis%22%7d
^
SyntaxError: Unexpected token d in JSON at position 0
at JSON.parse (<anonymous>)
at IncomingMessage.<anonymous> (C:\Users\dm\nodeServer\serv\server.js:17:24)
at IncomingMessage.emit (events.js:159:13)
at endReadableNT (_stream_readable.js:1062:12)
at process._tickCallback (internal/process/next_tick.js:152:19)
Т.е. по сообщению в консоли видно, что JSON до сервера доходит, он его даже собирает(видны куски того что мы посылали), но когда пытается выполнить JSON.Parse, что то его не устраивает.
Что я делаю не так?
Вы в функцию parse даёте не json строку, а весь закодированный запрос
if (body.data) {
// handle error
return;
}
const data = JSON.parse(decodeURIComponent(body.data));
// {"level":1,"timeElapsed":47.5,"playerName":"Dr+Charles+Francis"}
А воообще советую установить body-parser
middleware и упростить себе жизнь! https://github.com/expressjs/body-parser#bodyparserjsonoptions
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, мне необходимо распаковать архив updatezip в папку с программой