2017-07-07 61 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}这是非常整洁的 –

相关问题