Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点Res.write发送多个对象:_Javascript_Node.js_Express_Request_Response - Fatal编程技术网

Javascript 节点Res.write发送多个对象:

Javascript 节点Res.write发送多个对象:,javascript,node.js,express,request,response,Javascript,Node.js,Express,Request,Response,我试图将响应中的多个对象作为json从一个路由发送回客户端。它是一种中间件,被调用,然后它在内部调用自己的另一条路径来获取数据并进行一些数据处理。代码如下: const axios = require('axios'); var datetime = require('node-datetime'); function MiddlewareRoutes(router) { var MiddlewareController = require('../controller

我试图将响应中的多个对象作为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)
我做错了什么?我不能只发送字符串,因为我必须发送对象…

用于将字符串写入响应体,接受的参数是chunk[,encoding][,callback],但是对象不是字符串,并且最小/最大值不是编码

如前所述,您可以使用JSON.stringify将对象转换为JSON字符串,但由于这是一种非常常见的行为,因此Behavior Express提供了一种方法来实现这一点

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


res.writeformattedData;这里格式化的数据是一个对象。正如错误消息所说,write需要一个字符串或缓冲区对象,因此必须对其进行转换。这样做:res.writeJSON.stringifyformattedData。节点希望内容不是对象,因为它需要字符串才能传递到服务器。服务器只理解Nodejs文档中提到的纯文本输入,默认情况下编码为“utf-8”。因此,当通过服务器发送对象时,服务器会丢弃该对象,并抛出预期缓冲区块或字符串数据的错误。

formattedData不是字符串或缓冲区。要使用res.write发送JSON,首先构造一个包含所有数据的对象。然后调用res.writeJSON.stringifyobj;所以您需要res.writeJSON.stringify{min:min,max:max,data:formattedData};谢谢,效果不错。这不是一个数字,而是一系列不同的对象。。[{..},{..},{..},{..}..]谢谢,这与JSON.stringify或res.send配合得很好,只需将所有内容创建到一个新对象中:{..}:
res.send({
    min,
    max,
    formattedData
});