Невозможно установить заголовки после их отправки клиенту Expressjs маршрутизатор - PullRequest
0 голосов
/ 19 февраля 2020

Я получаю сообщение об ошибке: не могу установить заголовки на express js, я думаю, что проблема заключается в том, чтобы написать setHeader, я был установлен, но все еще не могу, это мой код:

router.get('/cek', (req, res) => {
const child = execFile(commandd, ['-c', 'config', 'GSM.Radio.C0']);
child.stdout.on('data', 
    function (data) {
        value = (JSON.stringify(data));
        x = value.split('.');
        y = JSON.stringify(x[2])
        result = y.replace(/\D/g, "");
        res.setHeader('Content-Type', 'text/html');
        res.send(result);
    }
);

child.stderr.on('data',
    function (data) {
        console.log('err data: ' + data);
    }
);

});

Я устал исправлять эту ошибку в течение двух дней, но все еще не могу, кто-нибудь может помочь?

1 Ответ

0 голосов
/ 19 февраля 2020

Как утверждает Фредерико Ибба , это обычно вызывается после отправки res.send, и данные все еще обрабатываются ... В качестве обходного пути для этого может быть просто получение всех данных перед отправкой используя res.send. Вы можете попробовать это.

async function executeCommand() {
    return new Promise((resolve, reject) => {
        const child = execFile(commandd, ['-c', 'config', 'GSM.Radio.C0']);

        child.stdout.on('data', 
             function (data) {
                value = (JSON.stringify(data));
                x = value.split('.');
                y = JSON.stringify(x[2])
                result = y.replace(/\D/g, "");

                resolve(result);
             }
        );

        child.stderr.on('data',
           function (err) { // Renamed data for err for clarification
               reject(err);
           }
        );
    });
}

router.get('/url', async (req, res) => {
    try {
        const result = await executeCommand();
        res.setHeader('Content-Type', 'text/html');
        res.send(result);
    } catch(error) {
        // There was an error. I'm throwing a 500
        res.sendStatus(500);
    }
});

Обратите внимание, что это будет действовать , только если вы уверены, что данные запускаются один раз, как указано skirtle

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