#node.js #express #mongoose #error-handling
Вопрос:
Я пишу функцию промежуточного программного обеспечения, которая ищет ошибки проверки, и если ошибка обнаружена, выдает определенный вывод, иначе продолжается поток программы. У меня есть две функции с точным кодом, но они проверяют разные схемы.
Моя первая функция выполняется без каких-либо исключений. Однако, когда я пытаюсь выполнить вторую функцию, я получаю сообщение об ошибке в консоли.
const validateCampground = (req, res, next) => {
const { error } = campgroundSchema.validate(req.body);
if (error) {
const msg = error.details.map((el) => el.message).join(",");
throw new ExpressError(msg, 400);
} else {
next();
}
};
const validateReview = (req, res, next) => {
const { error } = reviewSchema.validate(req.body);
if (error) {
const msg = error.details.map((el) => el.message).join(",");
throw new ExpressError(msg, 400);
} else {
next(); //this is the point where the exception occurs
}
};
Только внутри функции validateReview функция следующего промежуточного программного обеспечения не распознается как допустимая функция.
Ответ №1:
Проблема заключалась не в следующем() промежуточном программном обеспечении, а в маршруте, поскольку я обертывал маршрут с помощью функции validateReview.
Я делал что-то вроде этого :
app.post(
"/campgrounds/:id/reviews",
validateReview(
catchAsync(async (req, res) => {
//my Logic here
})
));
В то время как я должен был сделать что-то подобное :
app.post(
"/campgrounds/:id/reviews",
validateReview,
catchAsync(async (req, res) => {
//my logic here
})
);
Ответ №2:
привет, если вы хотите использовать промежуточное программное обеспечение
exports.middileware = (req,res,next)=>{
try{
//middileware logic
next();
}catch(err){
//print the error
})
}
}
и вызовите экспортированный файл middileware в поле требуется файл, чтобы проверить функцию middileware
const { middileware } = require('path');
и используйте вот так
router.get('/routename',middleware,nextfunction) //router you can choose as you like get,post,patch anything
попробуйте это