2017-07-07 29 views
0

我目前正在用AngularJS前端構建一個快速應用程序,並且我遇到了一個令人討厭的錯誤或者代碼錯誤,我似乎無法弄清楚。重新加載的快速應用程序不工作(角前端)

每當我嘗試重新加載我的頁面的任何部分我得到錯誤(無法GET/View1)。這是我的主要快車路線。

app.get('/', function(req, res) { 
    res.sendfile('./public/index.html'); 
}); 

我的嘗試:

我已經看到了關於這個主題的其他討論他們建議重定向所有路由角,所以我想這:

app.get('*', function(req, res) { 
res.sendfile('./public/index.html'); 
}); 

和設置在我的index.html中的基礎網址。

此刻的問題:

這似乎是工作,但我還內置了高速REST API和所有的突然我沒有得到我的API調用任何請求參數。

app.get('/api/location', function(req, res) { 
var location = req.query; 
Events.getEventsbyLocation(location, function (err, event) { 
    if(err){ 
     throw err; 
    } 
    res.json(event); 
}) 
}); 

req.query將始終未定義,即使它以前完美工作。我認爲在提交請求參數之前,AngularJs會重定向所有API調用。

還有人遇到過這個問題嗎?任何幫助將不勝感激。

+0

我們可以看到你的整個express路由器文件嗎?您設置規則的順序很重要(我認爲*會捕獲所有內容,您應該將此規則用作後備),並且請注意,對於靜態資源,您不應該使用'sendFile'我認爲! – sjahan

回答

2

您的express服務器腳本中的app.get('/api/location', function(req, res) {...})必須在app.get('*', function(req, res) {...})路由之前,因爲express首先匹配的路徑。

此外,正確的路線必須是app.get('/api/:location', function(req, res) {...}):表示查詢參數。現在您可以使用var location = req.params.location閱讀位置。

app.get('/api/:location', function(req, res) { 
var location = req.params.location; 
Events.getEventsbyLocation(location, function (err, event) { 
    if(err){ 
     throw err; 
    } 
    res.json(event); 
}) 
}); 

app.get('*', function(req, res) { 
res.sendfile('./public/index.html'); 
}); 

爲了解析/api/location?lat=42&lng=42你可以使用:

app.get('/api/location', function(req, res) { 
var location = { lat: req.query.lat, lng: req.query.lng }; 
}); 

req.query包含所有查詢參數。如果你要求api/location?lat=42&lng=42&foo=bar,你會得到這個對象:

{ 
    lat: 42, 
    lng: 42, 
    foo: bar 
} 
+1

不錯!是的,把它放在前面非常感謝!該路線是正確的,但我更喜歡在本例中使用req.query而不是params。 –

+0

不客氣的朋友。根據快速API參考'req.query'適用於這樣的路由:'/ api?location = foo'。 http://expressjs.com/en/api.html#req.query –

+0

是的我可以打個電話像/ api/location?lat = 52&lon = 16 and req.query will give me an object {lat:52, lon:16}這是非常整潔的 –

相關問題