使用AngularJS的loopbackJS的奇怪行为

时间:2014-12-03 12:37:47

标签: angularjs loopbackjs

我在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为真?

提前致谢

2 个答案:

答案 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
...