我在 product.routes.js 中创建了 uploadProduct 路由,并在 index.js 文件中调用了它。
产品.routes.js:
const express= require("express");
const uploadProduct = require("../controllers/product.controller");
const ProductValidation = require("../middlewares/validation/product.validation");
const router = express.Router()
router.post("/uploadProduct",ProductValidation.addProduct,uploadProduct)
module.exports = router
index.js:
const router = require("express").Router()
const product = require("./product.routes")
router.use(product)
module.exports = router
这就是问题发生的地方
product.validation.js:
const joi = require("joi");
const APIError = require("../../utils/errors");
const Response = require("../../utils/response");
class ProductValidation {
constructor() {}
static addProduct = async (req, res, next) => {
const schema = await joi.object({
ProductName: joi.string().required().max(45).min(1),
NumberOfProducts: joi.number().required().max(45).min(1),
UnitOfMeasurment: joi.string().required().max(45).min(1),
PurchasePrice: joi.number().required(),
SellingPrice: joi.number().required(),
QRcode: joi.string().required().max(45).min(1),
// İmage: joi.string().required().max(45).min(1),
});
try {
const value = await schema.validateAsync(req.body);
return new Response(value, "success").created(res);
} catch (error) {
if (error.details && error?.details[0].message)
throw new APIError(error.details[0].message, 400);
else throw new APIError("Please comply with validation rules", 400);
}
next();
};
}
module.exports = ProductValidation;
它是 uploadProduct 路由的中间件。为什么我不能在 try catch 结束时使用 next () 函数。
我可以在 try catch 返回之前使用 next() 函数,但我不能在 try catch 结束时使用这个函数。为什么?trycatch 块返回会影响下一个代码吗?因为这个文件中 trycatch 之后的任何代码都是意外代码!
谢谢:)