Javascript 如何处理express api中的多个错误?就像我要处理404405400和500一样

Javascript 如何处理express api中的多个错误?就像我要处理404405400和500一样,javascript,node.js,express,error-handling,Javascript,Node.js,Express,Error Handling,因为我是node.js的新手,我已经使用express框架构建了RESTAPI。 我想为我的api处理多个错误。就像我想处理404405400和500一样。 express提供了默认的错误处理程序。但我不明白它是如何工作的。所以我想构建自定义中间件来处理所有这些错误 捕获404并转发到错误处理程序 app.use(function(req, res, next) { var err = new Error('URL Not Found'); err.status = 404;

因为我是node.js的新手,我已经使用express框架构建了RESTAPI。 我想为我的api处理多个错误。就像我想处理404405400和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: {}
    });
});

我已经处理了404400和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}`));
借助router函数中的此语句,您可以使用json将错误状态传递给前端:

return res.status(400).json({ error: "Data should not be empty!" });
检查它:

例如,使用错误处理中间件创建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

});

是的。我可以这样做。但我想处理app.js文件中的所有错误。正如您所建议的,我必须处理所有路由中的错误。因此我想构建能够处理所有错误的中间件。