Я использую библиотеку ftp на npm. Я столкнулся с этой ошибкой

_http_outgoing.js:357
throw new Error('Can\'t set headers after they are sent.');
^

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
    at ServerResponse.header (/Users/nomanmaqsood/Documents/netsuite-ftp/node_modules/express/lib/response.js:730:10)

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

c.on ('ready', function () {
            c.list (function (err, list) {
                if (err) {
                    c.end();
                } else {
                    if (list.length > 0) {
                        c.end(); 
                        return res.status(200).json({data:list});//crash here on 2nd call
                    }
                }
            });
        });

Пожалуйста, помогите мне

0
DynaSoft 14 Июл 2017 в 15:06
Похоже, вы отправляете ответ до установки заголовка. Возможно, разделите строку res.status (200) .json () на две строки, например. res.status (200), res.json (...);
 – 
Terrance00
14 Июл 2017 в 15:12

2 ответа

Убедитесь, что вы не вызываете res.json или res.send дважды в одном HTTP-запросе клиента.

Пытаться

c.on ('ready', function () {
    c.list (function (err, list) {
        if (err)
            return res.status(500).json({error: err.message});

        c.end(); 
        res.status(200).json({data: list || []});
    });
});

P.S. Я полагаю, что вы используете Express.

0
Aikon Mogwai 14 Июл 2017 в 15:25
Да, я использую экспресс, такая же ошибка с этим кодом
 – 
DynaSoft
14 Июл 2017 в 16:27

C был глобальным объектом, который регистрировался дважды. просто сделайте объект локальным, и все будет работать как шарм

0
DynaSoft 19 Июл 2017 в 11:26