Я использую multer для хранения файлов. Для этого у меня есть POST-маршрут с промежуточным программным обеспечением для аутентификации. Получаемый запрос - это multipart / form-data (файл и другие текстовые поля).
let upload = multer({ storage, fileFilter: validateRequest }).single("file");
//The validateRequest function in fileFilter validates the request.
router.post("/", auth,(req, res) => {
upload(req, res, async err => {
//code for uploading follows
}
А вот и промежуточное ПО аутентификации
function(req, res, next) {
const token = req.header("x-auth-token");
if (!token) return res.status(401).send("Access denied. No token provided");
try {
const decoded = jwt.verify(token, config.get("privateKey"));
req.user = decoded;
next();
} catch (err) {
res.status(400).send("Invalid token");
}
};
Теперь проблема в том, чтобы вызвать этот маршрут без действительного заголовка токена (x-auth-token) приводит к ответу об ошибке H18 «Запрос сервера прерван» на Heroku (отлично работает на локальной машине!).
Вкл С другой стороны, если я удаляю файл из запроса multipart / form-data, все работает хорошо.
Эта ошибка генерируется, потому что (на мой взгляд) запрос слишком велик и отправляется ответ перед использованием всего запроса.
Итак, пока, в качестве временного обходного пути, я удалил промежуточное ПО аутентификации и поместил код аутентификации в функцию fileFilter (validateRequest), чтобы весь входящий поток был полностью обработан. перед отправкой какого-либо ответа.
Ошибка исчезла, но теперь функция validateRequest пахнет .
Есть ли способ использовать промежуточное программное обеспечение аутентификации, как раньше и делать все связанные с аутентификацией вещи только там?
Вот аналогичный ответ , описывающий проблему как старую ошибку nodejs без исправления.