Узел Res.write отправляет несколько объектов: - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь отправить несколько объектов в ответ как json обратно клиенту с одного маршрута. Это какое-то промежуточное программное обеспечение, которое вызывается, а затем вызывает другой маршрут внутри, чтобы получить данные и выполнить некоторую обработку данных. Вот код:

const axios = require('axios');
var datetime = require('node-datetime');

    function MiddlewareRoutes(router) {
        var MiddlewareController = require('../controllers/MiddlewareController')
        router.route('/Middleware/someotherLink/parametres').get(function(req,res,next) {

          console.log(req.params.id, req.params.startTime, req.params.endTime);
          url = `http://localhost:hidden/link/..`;
          url2 = "http://localhost:port+params..."

          axios.get(url) //, {responseType: 'json',}
          .then(response => {
            var formattedData = formatData(response.data);
            [max,min] = getMinMax(formattedData);
            res.write("max:",max);
            res.write("min:",min);
            res.write(formattedData);
            res.end();

          })
          .catch(error => {
            console.log(error);
          });
        })      
    }

Однако я получаю сообщение об ошибке:

TypeError: First argument must be a string or Buffer
    at write_ (_http_outgoing.js:642:11)
    at ServerResponse.write (_http_outgoing.js:617:10)
    at axios.get.then.response (C:\Users\U500405\Desktop\Backend\routes\MiddleWare.js:19:13)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

Что я делаю не так? Я не могу просто отправить строки, потому что я должен отправлять объекты ...

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

res.write(formattedData); Здесь отформатированные данные - это объект. Как говорится в сообщении об ошибке, write ожидает строку или объект Buffer, поэтому вы должны преобразовать его. при этом: res.write(JSON.stringify(formattedData)). Узел ожидает, что содержимое не будет объектом, потому что ему нужна строка для передачи на сервер. Сервер понимает только ввод простого текста, как указано в Nodejs Docs Nodejs Doc Link для res.write () , и по умолчанию используется кодировка 'utf-8'. поэтому при отправке объекта через сервер сервер отбрасывает его и выдает ошибку ожидаемых кусков буфера или строковых данных.

0 голосов
/ 07 сентября 2018

Запись предназначена для записи строк в тело ответа, принимаются параметры (chunk[, encoding][,callback]), однако объект не является строкой, а ваши минимальные / максимальные значения не являются кодировками.

Как уже говорилось ранее, вы можете использовать JSON.stringify для преобразования объекта в строку JSON, однако, поскольку это довольно распространенное поведение, Express предоставляет метод send , который может сделать именно это.

res.write(JSON.stringify({
    min, 
    max, 
    formattedData
}));

или

res.send({
    min,
    max,
    formattedData
});
...