我的 errorHandler 中間件沒有顯示回應。它沒有像我編碼的那樣以 json 格式給出錯誤,它仍然以 html 格式顯示錯誤。我哪里做錯了?
應用程式.js
import express from "express";
import dotenv from "dotenv";
import connectDB from "./config/db.js";
import colors from "colors";
import productRoutes from "./routes/productRoutes.js";
import errorHandler from "./middlewares/errorMiddleware.js";
dotenv.config();
// Connecting to MongoDB
connectDB();
// Express specific
const app = express();
// Middlewares
app.use(errorHandler);
app.use("/api/products", productRoutes);
app.use("/api/products/:id", productRoutes);
const PORT = process.env.PORT || 5000;
app.listen(
PORT,
console.log(
`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold
)
);
錯誤中間件.js
const errorHandler = (err, req, res, next) => {
const statusCode = res.statusCode === 200 ? 500 : res.statusCode; //we sometimes get 200 code (ok) even if its error. 500 means server error
res.status(statusCode);
res.json({
message: err.message,
stack: process.env.NODE_ENV === "production" ? null : err.stack,
});
};
export default errorHandler;
輸出:

預期輸出:
{
message: ...
stack: ...
}
uj5u.com熱心網友回復:
在其他 app.use() 和路由呼叫之后,您最后定義錯誤處理中間件
資源
這是基本的作業示例
import express from "express";
const app = express();
app.use('/api/products', (req, res) => {
throw new Error('Triggers an error');
});
// Do other routes here and keep error handling below.
app.use((err, req, res, next) => {
res.status(res.statusCode);
res.json({
message: err.message,
stack: process.env.NODE_ENV === "production" ? null : err.stack,
});
})
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server started on port ${PORT}`);
});
您唯一的錯誤是定義中間件順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/429948.html
