我正在开发一个移相器游戏,该游戏应该将玩家数据发送到服务器以进行验证。这是我的代码:
postUserInfo(callback, context, loader, data) {
let body = `prefix=${data.prefix}&prefix_id=${data.prefix_id}&suffix=${data.suffix}&suffix_id=${data.suffix_d}&password=${data.password}`;
const realUrl = this.url + 'saveUserInfo';
let xhr = new XMLHttpRequest();
xhr.open('POST', realUrl, true);
xhr.timeout = this.timeout;
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200 || xhr.status === 201) {
console.log(xhr.responseText);
var jsonValue = JSON.parse(xhr.responseText);
loader.style.display = 'none';
callback(jsonValue.message);
}
}
};
xhr.send(body);
}
这是我基于this的服务器端代码:
const express = require('express')
const app = express()
const { parse } = require('querystring');
app.post('/saveUserInfo', function (req, res) {
var body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
let data = parse(body)
console.log(data);
res.end(data);
});
});
我只是试图通过尽可能少的外部模块或主体解析器传递数据,因为这只是我需要解决的小问题,然后再解决更大的问题-测试数据库插入并将代码放在AWS上Lambda(我认为其中的某些功能将无效)。
但是,即使这样也让我感到难过。
如果游戏发布了,这是服务器的响应(崩溃之前):
{ prefix: 'shy',
prefix_id: 'undefined',
suffix: 'ant',
suffix_id: 'undefined',
pin: 'undefined' }
_http_outgoing.js:558
throw new TypeError('First argument must be a string or Buffer');
^
另一方面,邮递员发布的数据却截然不同,结果相同:
{ '----------------------------117273776358694001644449\r\nContent-Disposition: form-data; name': '"prefix"\r\n\r\nsmall\r\n----------
------------------117273776358694001644449\r\nContent-Disposition: form-data; name="prefixID"\r\n\r\n2\r\n----------------------------
117273776358694001644449\r\nContent-Disposition: form-data; name="suffix"\r\n\r\nkangaroo\r\n----------------------------1172737763586
94001644449\r\nContent-Disposition: form-data; name="suffixID"\r\n\r\n10\r\n----------------------------117273776358694001644449--\r\n
' }
_http_outgoing.js:558
throw new TypeError('First argument must be a string or Buffer');
^
我到底在做什么错?在该示例中看起来如此简单。
答案 0 :(得分:1)
错误是指res.end(data);
,当您仅使用字符串或缓冲区时,正在向该对象传递对象。
您需要执行res.end(JSON.stringify(data));
才能使其正常工作。