Анализ тела в узле js приводит к «Первому аргументу должна быть строка или буфер» - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю над фазерной игрой, которая должна отправлять данные игрока на сервер для проверки.Вот мой код для этого:

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 голосов
/ 11 сентября 2018

Ошибка относится к res.end(data);, когда вы передаете ему объект, когда он принимает только строку или буфер.

Вам нужно сделать res.end(JSON.stringify(data));, чтобы он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...