2016-01-30 60 views
0

這是我的代碼:無法攔截404快速結點JS

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

app.use(express.static(__dirname + '/public')); 


app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/public/test-angular.html'); 
}) 

app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.sendFile(__dirname + '/public/error.html'); 
}); 

var server = app.listen(3000, function() { 
    console.log("Example app listening on port 3000"); 
}); 

當我訪問的URL http://localhost:3000/xyz,它不存在,我得到標準的頁面說Cannot GET /xyz,而不是我的自定義錯誤頁。爲什麼?

回答

0

函數簽名您正在使用(err, req, res, next)是錯誤。例如。一箇中間件叫next(new Error('failed'))。你需要的是一個普通的中間件,它恰好是最後一個被執行的,這意味着你把它解釋爲404(見下面的答案)。

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

app.use(express.static(__dirname + '/public')); 


app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/public/test-angular.html'); 
}) 

app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.sendFile(__dirname + '/public/error.html'); 
}); 


//------------------ 
app.use(function(req, res, next) { 
    res.status(404); 
    res.sendFile(__dirname + '/public/error.html'); 
}); 
//------------------ 


var server = app.listen(3000, function() { 
    console.log("Example app listening on port 3000"); 
}); 
0

節點通常開始匹配從頂端到底端的端點。因此,首先記下您的應用的所有端點,然後在末尾寫下如下所示的端點,當您的定義的端點都不匹配時將執行該端點。

app.get('/path1', handler1); 
app.get('/path2', handler2); 
app.get('/path3', handler3); 
app.get('/*',function (req, res) { 
    //This block will executed when user tries to access endpoint other than /path1,/path2,/path3 
    // Handle error here 
}) 

您的代碼應該是這樣的:

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

app.use(express.static(__dirname + '/public')); 


app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/public/test-angular.html'); 
}) 

app.get('/*',function (req, res) { //If any of your defined endpoints doesn't match, this block will be executed. 
    res.status(404); 
    res.sendFile(__dirname + '/public/error.html'); 
}); 

var server = app.listen(3000, function() { 
    console.log("Example app listening on port 3000"); 
});