解析节点js中的主体会导致“第一个参数必须是字符串或缓冲区”

时间:2018-09-11 08:38:45

标签: node.js xmlhttprequest

我正在开发一个移相器游戏,该游戏应该将玩家数据发送到服务器以进行验证。这是我的代码:

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

enter image description here

我到底在做什么错?在该示例中看起来如此简单。

1 个答案:

答案 0 :(得分:1)

错误是指res.end(data);,当您仅使用字符串或缓冲区时,正在向该对象传递对象。

您需要执行res.end(JSON.stringify(data));才能使其正常工作。