Проблема с настройкой заголовков при использовании промежуточного программного обеспечения с использованием fs в экспресс-приложении

#node.js #express #fs

#node.js #экспресс #fs

Вопрос:

Я довольно новичок в NodeJS и пытаюсь создать простой API видеопотока. Я пытаюсь аутентифицировать API с помощью промежуточного программного обеспечения, которое использует файл в системе, чтобы проверить, присутствует ли в нем электронная почта или нет. Вот код для этого:

 checkUserAllowed = (req, res, next) => {
    const email = req.body.email;
    if (!email) {
        res.status(401).send("User details not found");
        return;
    }

    fs.readFile(dataFile, 'utf8', (err, data) => {
        if (err) return false;

        const emails = data.split("n");
        let allowed = false;
        emails.forEach((row)=>{
            if (row==email) allowed=true;
            next();
        })
                        
        if (!allowed) res.status(401).send("User not subscribed");
        return;
    })
}
 

И фрагмент для отправки видео приведен ниже:

 fs.stat(path, (err, data) => {
        if (err) {
            console.log(err);
            res.status(404).send();
            return;
        }

        const size = data.size;
        const head = {
                'Content-Length': size,
                'Content-Type': 'video/mp4',
        }

        res.writeHead(200, head);
        fs.createReadStream(path).pipe(res);
    }
})
 

Однако при запуске этого я получаю следующую ошибку:

 _http_outgoing.js:558
    throw new ERR_HTTP_HEADERS_SENT('set');
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:558:11)
    at ServerResponse.writeHead (_http_server.js:289:21)
    at /<path>/stream.js:51:17
    at FSReqCallback.oncomplete (fs.js:184:5) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
 

Есть какие-либо подсказки?

Ответ №1:

Получил глупую ошибку при вызове next() в цикле.