2017-03-05 90 views
0

如何在Express/Nodejs中捕獲404錯誤?

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錯誤,否則錯誤的請求路徑。

+0

[捕捉404s的相關文章](http://stackoverflow.com/questions/6528876/how-to-redirect-404-errors-to-a-page-in-expressjs) – user82395214

回答

1

在你的路由文件夾(如果您正在使用快遞根)或其他任何地方創建一個使用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); 
}); 

那麼什麼樣的t他需要做的是,它會處理來自客戶端的GET和POST請求的URI /dishes和他人,它會引發錯誤404,發送給/fail路徑。

+0

看到你的例子,我發現它似乎理解它。謝謝。 – ivanJF

0

請記住,快速使用()執行所有請求,所以發生了什麼是您的404狀態附加到您的應用程序中的所有請求。使用它,它檢查輸入是否正確,例如如果一個HTTP明文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'); 
} 

我希望這有助於。

+0

感謝您的好解釋和這將有助於我深刻理解這個問題。 – ivanJF

+0

@ivanJF如果它有幫助,怎麼樣,大聲笑。很高興幫助 – 2017-03-05 09:06:05