Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 如何将数据从服务器(node.js)发送到客户端(react.js)?_Javascript_Node.js_Stream_Sequelize.js_Endpoint - Fatal编程技术网

Javascript 如何将数据从服务器(node.js)发送到客户端(react.js)?

Javascript 如何将数据从服务器(node.js)发送到客户端(react.js)?,javascript,node.js,stream,sequelize.js,endpoint,Javascript,Node.js,Stream,Sequelize.js,Endpoint,我最终得到了一个服务器,它提供base64格式的图片。问题是,当我想发送一个base64图像数组时,它们是巨大的 我想把数组分成小块发送到前端。 我使用Sequelize从数据库中检索数据 有人知道怎么做吗 这就是我的端点到目前为止的外观: router.get('/download', async (req, res, next) => { try { const getAllStoneData = await StoneData.findAll();

我最终得到了一个服务器,它提供base64格式的图片。问题是,当我想发送一个base64图像数组时,它们是巨大的

我想把数组分成小块发送到前端。 我使用Sequelize从数据库中检索数据

有人知道怎么做吗

这就是我的端点到目前为止的外观:

router.get('/download', async (req, res, next) => {

    try {
        const getAllStoneData = await StoneData.findAll();

        const convertBlobToString = getAllStoneData.map((oneStone) => {

            const getBuffer = oneStone.dataValues.blobImage;
            const convertToString = getBuffer.toString('utf8');
            const copyOneStone = {
                ...oneStone.dataValues,
                blobImage: convertToString,
            };

            return copyOneStone;
        });

        let chunk = [];
        while (convertBlobToString.length > 0) {
            chunk = convertBlobToString.splice(0, 1);

            res.write(chunk);

        }

        res.end();

    } catch (error) {
        res.status(400).send({ error });
    }
});
当我运行这个时,我得到的错误是


“UnhandledPromisejectionWarning:Error[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头”

您是否检查了错误是否是由于
catch
块造成的?它试图发送一个400响应,但是你可能已经在一个中间。是的,错误出现或不在控制台中。我认为这是第一步。我甚至不确定我写的这个小函数是否适合这样做。我已经发现,但仍然无法正确理解删除res.status时会出现超时!我建议添加一些日志记录,以查看超时时发生的情况。我不再采用这种方法,因为发送数据块对于流式传输或非常大的数据是有意义的。还有一些库,比如socket.io,支持这种特性。不需要自己去实施。也许对于不需要像socket.io这样庞大库的小型项目。如果有人想遵循这个方法进行较小的项目,我也会感兴趣。但是,我现在使用multer只是为了发送回链接,而不是整个文件。