如何在Express / Nodejs中捕获404错误?

时间:2017-03-05 03:25:11

标签: javascript node.js express



var express = require('express');
var path = require('path');

var app = express();
app.use(express.static(path.join(__dirname, 'public')));

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});




我抓到404错误时什么时候感到困惑? 我希望在输入正确的请求路径时不会捕获404错误来实现目标,否则错误的请求路径将会。

2 个答案:

答案 0 :(得分:2)

在您的路线文件夹(如果您使用快递)或其他任何地方创建使用express.router()的节点模块,如下所示

var express = require('express');
var bodyParser = require('body-parser');

var dishRouter = express.Router();

dishRouter.use(bodyParser.json());

然后处理您的请求,例如:

dishRouter.route('/')
.get(function(req, res, next) {
    res.end('Will send all the dishes to you!');
})

.post(function(req, res, next) {
    res.end('Will add the dish: ' + req.body.name + ' with details: ' + req.body.description);
});

并在你的app.js或你运行的主文件中使用它:

var express = require('express');
var path = require('path');
var dishRouter=require('./routes/dishRouter');

var app = express();
app.use(express.static(path.join(__dirname, 'public')));

app.use('/dishes',dishRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  res.redirect('/fail');
  next(err);
});

那么这将会做的是,它将处理来自客户端的URI /dishes的get和post请求,而对于其他人,它将抛出错误404并发送到/fail路径。

答案 1 :(得分:1)

请记住,对于所有请求执行express use(),因此发生的情况是您的404状态附加到应用程序中的所有请求。在回调中使用它来检查输入是否正确,例如,如果它是HTTP express post请求:

// This is just an example, please note
app.post('/signin', function(req, res) {
    if(!user.passwordCheck(req.body.password) {
        res.status(404).send({
            message: 'Incorrect input'
        }); 
    } else res.redirect('/success');
}

我希望这会有所帮助。