我正在嘗試使用帶有錯誤中間件的 express 處理錯誤。這是我的索引:
const functions = require("firebase-functions");
const express = require("express");
const cors = require("cors");
require("dotenv").config();
const methodOverride = require('method-override')
const {logErrors, errorHandler,boomErrorHandler, error404Handler } = require("./src/middlewares/error.handler")
//modulos personalizados
const { productsRoutes } = require("./src/products/products.routes");
const userRoutes = require("./src/users/user.routes");
const UserServices = require("./src/users/user.services")
//nombre
const userService = new UserServices
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(cors({ origin: true }));
app.use(methodOverride());
app.use(logErrors);
app.use(boomErrorHandler);
app.use(errorHandler);
// app.use(error404Handler);
exports.setCustomerClaim = functions.auth
.user()
.onCreate(userService.customerClaimServ)
productsRoutes(app);
exports.api = functions.https.onRequest(app);
如您所見,我有 logErrors 中間件。
這是我的簡單控制器,它可以很好地解決問題,但是當我next()在其中執行操作時,catch()它不會進入錯誤中間件。
這是我的控制器:
async function getAll(req, res, next) {
try {
const products = await productServices.getAllSer();
console.log("Aca esta tu error");
res.json(products);
} catch (error) {
next();
}
}
這是我的中間件:
/* eslint-disable @typescript-eslint/no-var-requires */
const boom = require("@hapi/boom");
function logErrors(err, req, res, next) {
console.error(err);
next(err);
}
function errorHandler(err, req, res, next) {
if (err) {
res.status(409).json({
message: err.message,
stack: err.stack,
});
} else {
next(err);
}
}
function boomErrorHandler(err, req, res, next) {
if (err.isBoom) {
const {output} = err;
res.status(output.statusCode).json(output.payload);
}
next(err);
}
function error404Handler (req, res) {
res.status(404)
res.send ({
message: boom.notFound('el recurso que busca no existe')
})
}
module.exports= {
logErrors,
errorHandler,
boomErrorHandler,
error404Handler
};
問題是,它沒有進入錯誤中間件,因為 next() 之前的任何東西都可以正常作業。
我將不勝感激任何幫助。提前致謝!
uj5u.com熱心網友回復:
您的問題出在控制器中,請像這樣使用return next(error);:
async function getAll(req, res, next) {
try {
const products = await productServices.getAllSer();
console.log("Aca esta tu error");
res.json(products);
} catch (error) {
return next(error);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473941.html
標籤:javascript 节点.js 表示 谷歌云功能
上一篇:如何將以下語法轉換為es6語法?
