2017-07-26 74 views
3

我正在給具有以下途徑服務器的請求:角HTTP返回狀態0,但我希望404

app.use('/401', (req, res) => res.status(401).end()); 
app.use('/403', (req, res) => res.status(403).end()); 
app.use('/404', (req, res) => res.status(404).end()); 
app.use('/500', (req, res) => res.status(500).end()); 
app.use('/502', (req, res) => res.status(502).end()); 
app.use('/503', (req, res) => res.status(503).end()); 
app.use('/504', (req, res) => res.status(504).end()); 

當我做與角(/404{})的請求:

public async post(path: string, data: object): Promise<Response> { 
    try { 
    return await this.http.post(path, data).toPromise(); 
    } catch (err) { 
    console.log('err', err); 
    throw err; 
    } 
} 

我得到:

ok: false 
status: 0 
statusText: "" 
type: 3 

在Chrome的控制檯我看到的請求被髮OPTIONS它確實返回404:

Request URL: http://localhost:3000/404/ 
Request Method: OPTIONS 
Status Code: 404 Not Found 

它是哪裏去的?我怎樣才能得到真正的錯誤代碼?

我看,這可能是一個問題CORS ...我的應用程序是4200,我的服務3000在我的服務,我有在頂部(別的前):

app.use(function(req, res, next) { 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    res.setHeader("Access-Control-Allow-Credentials", "true"); 
    res.setHeader("Access-Control-Allow-Methods", "*"); 
    res.setHeader("Access-Control-Allow-Headers", "*"); 
    next(); 
}); 

我不噸認爲這是一個問題與CORs ...

但我不知道,可能是?

不應該得到err狀態404

回答

2

顯然OPTIONS永遠不能返回404因爲它會導致這個錯誤:

Response for preflight has invalid HTTP status code 404

我改變了頭,以end如果是OPTIONS請求的請求,否則就繼續說:

const headers = (req, res, next) => { 
    res.setHeader("Cache-Control", "no-cache"); 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    res.setHeader("Access-Control-Allow-Credentials", "true"); 
    res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS"); 
    res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept"); 
}; 

app.use((req, res, next) => { 
    console.log(req.method); 
    headers(req, res, next); 

    if (req.method === 'OPTIONS') { 
    return res.end(); 
    } 

    next(); 
}); 

然後請求返回角度應用上的正確數據:

ok: false 
status: 404 
statusText: "Not Found" 
type: 2