我在app.js中设置了html5mode(true)。我的代码如下
$routeProvider.when( '/hello/there', {
templateUrl: 'partials/hello.html',
controller : 'HelloCtrl'
} );
// if none of the above routes are met, use this fallback
// which executes the 'AppCtrl' controller (controllers.js)
$routeProvider.otherwise( {
redirectTo: '/'
} );
$locationProvider.html5Mode(true);
但是当我浏览http://localhost:3000/hello/there
Loopback raiseUrlNotFoundError导致404错误。当我设置html5Mode(false)时,一切正常
如何使其工作,然后使用html5Mode为真?
提前致谢
答案 0 :(得分:3)
如果您在server.js或server / boot中执行此操作,则无效 因为这将在静态middlware之前提供,然后你的所有静态文件(js,css,imgs)将通过这个middlware首先给你带来很多错误 解决方案是在server / middlware / serveindex.js中添加一个新的middlware函数
module.exports = serveindex;
function serveindex(){
return function(req, res){
res.sendFile("index.html", {root: __dirname+"/../../client"})
}
}
然后在middlware.json中调用这个middlware之后的静态文件
"files": {
"loopback#static": {
"params": "$!../client"
}
},
"files:after": {
"./middleware/serveindex":{
"enabled": true
}
},
答案 1 :(得分:2)
您需要重定向服务器端的所有路由:
在server.js
:
...
// -- Mount static files here--
// All static middleware should be registered at the end, as all requests
// passing the static middleware are hitting the file system
// Example:
app.use(loopback.static(path.resolve(__dirname, '../client'))); //mount static files first
...
app.all("/*", ...) //then redirect all routes
...