Javascript 如何处理express api中的多个错误?就像我要处理404405400和500一样
因为我是node.js的新手,我已经使用express框架构建了RESTAPI。 我想为我的api处理多个错误。就像我想处理404405400和500一样。 express提供了默认的错误处理程序。但我不明白它是如何工作的。所以我想构建自定义中间件来处理所有这些错误 捕获404并转发到错误处理程序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;
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文件中的所有错误。正如您所建议的,我必须处理所有路由中的错误。因此我想构建能够处理所有错误的中间件。