gpt4 book ai didi

javascript - 如何处理Express API中的多个错误?例如我要处理404,405,400和500

转载 作者:行者123 更新时间:2023-12-03 08:43:31 25 4
gpt4 key购买 nike

因为我是node.js的新手,所以我已经使用express框架来构建rest api。
我想为我的api处理多个错误,例如我想处理404,405,400和500。
express正在提供默认的错误处理程序。但是我不知道它是如何工作的。所以我想构建自定义中间件来处理所有错误。

捕获404并转发到错误处理程序

app.use(function(req, res, next) 
{
var err = new Error('URL Not Found');
err.status = 404;
next(err);
});
app.use(function(req, res, next) {
var err = new Error('Bad Request');
err.status = 400;
next(err);
});
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.json({
err:{

message:err.message,
statuscode:err.status
}
})
res.render('error', {
message: err.message,
error: err
});
});
}

**production error handler no stacktraces leaked to user**

app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});

我已经处理了404,400和500.但是我无法处理405错误。我可以处理404或405.两者都不一起工作

最佳答案

您可以使用express和router属性来实现:

const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const bodyParser = require("body-parser");

app.use(bodyParser.json());



mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log("MongoDB Connected..."))
.catch(err => console.log(err));


router.post("/", (req, res) => {
const { data} = req.body; // This gets the data from the body of the request, using body-parser
if (!data) {
return res.status(400).json({ error: "Data should not be empty!" });
}
});

app.use("/")
const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));

通过路由器功能中此语句的帮助,您可以将错误状态和json传递给前端:
return res.status(400).json({ error: "Data should not be empty!" });

检查它: https://expressjs.com/en/api.html#res.status

使用错误处理中间件,例如,创建一个error.js文件:
const app = require('express');

const error = app.use(function (err, req, res, next) {
if (user == null || user == 'undefined') {
res.status(404);
}
next();
})

module.exports = error;

现在,您可以在路由器功能中使用它,例如:
const error = require("../middleware/error");

router.post("/", error, (req, res) => {
const { data} = req.body; //now beacuse of the "error" in the parameters, if the request pass the error, than it will continue to this function

});

关于javascript - 如何处理Express API中的多个错误?例如我要处理404,405,400和500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com