2016-07-30 116 views
0

我也可以这样来配置我的UI路由器:UI路由器刷新问题

app.config(function($stateProvider, $urlRouterProvider, $locationProvider) { 

     $stateProvider 
      .state('home', { 
       url: "/home", 
       templateUrl : 'home/home.html', 
       controllerUrl: 'home/controller.js' 
      }) 
      .state('blog', { 
       url: "/blog", 
       templateUrl : 'blogger/blog.html', 
       controllerUrl: 'bloger/controller.js' 
      }) 

     $locationProvider.html5Mode({ 
      enabled: true, 
      requireBase: true 
     }); 
    }); 

Server代码:

var express = require('express'); 
var serveStatic = require('serve-static'); 

var server_port = 9000; 

var server_ip_address = '127.0.0.1' 

var app = express(); 

app.use(express.static('app')); 

app.use(serveStatic('app', {'index': ['index.html', 'index.htm']})); 

dirName = 'app'; 

options = { 
    root: dirName, 
    dotfiles: 'deny', 
    headers: { 
    'x-timestamp': Date.now(), 
    'x-sent': true 
    } 
}; 

app.get('*', function(req, res) { 
    return res.sendFile('index.html', options); 
}); 

app.listen(server_port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + server_port) 
}); 

但每当我按Ctrl /命令+ R(或刷新),它说它找不到路径?我怎样才能解决这个问题?

Folder structure : Views : ./app/home/, app/blog/ Basefile: ./app/index.html Angular UI-routing from : ./app/base.js

+0

你是什么意思的“它找不到路径?”?另外,您可能希望指定一个默认/回退状态。 – matmo

+0

“不能GET/home” – Javier

+0

先转到那个路径,比运行你的脚本。这可能是htaccess问题或任何其他路由问题。 – eronax59

回答

1

问题出在服务器设置。 Angular是Front Controller应用程序。您需要将每个请求重定向到服务器上的index.html/index.php。例如,在Apache中的Htaccess设置。进一步的信息可以在这里找到:htaccess redirect for Angular routes

+0

我添加了我的服务器代码。你能指定它出错的地方吗? – Javier

+0

另外,如果这是服务器问题,为什么当我使用'ngRoute'时不是这种情况? – Javier

0

您可以使用下面的代码在你的app.js,&那么它的工作:

更新:

/** Below code set the html as your default engine*/ 

    var fs = require('fs'); 
    app.engine('html',function(path,opt,fn){ //manishp 
     fs.readFile(path,'utf-8',function(err,str){ 
      if(err) return str; 
      return fn(null,str); 
     }); 
    }); 


app.get('*',function(req,res){ 
    res.render('<your_layout_file_or_basefile>');  
}); 

这主要是因为你的AngularJS路线不是实际的HTML页面。一个例子就是如果你的角度应用程序中有一条路径/登录。如果从应用内部链接到该网址,该网址可以正常工作,但如果用户试图直接访问该网页,服务器将返回404。

这是因为AngularJS HTML5模式使用历史API来推送新网址到您的浏览器。是的,这需要在服务器端做一些额外的工作,让这些url返回正确的内容。

+0

它引发错误:刷新时找不到模块'html'。 – Javier

+0

为你的索引文件或布局文件命名,同时粘贴你的代码给你无法找到模块错误因为我使用上述解决方案,它为我工作。 – rroxysam

+0

我已将代码和文件夹结构添加到我的帖子中。 – Javier

0

问题出在您的服务器端,您应该处理server.js文件中的所有路由。 例如下面的代码段

router = settings.express.Router() 
dirName = settings.path.resolve(__dirname, '..', '..'); 

options = { 
    root: dirName + '/website/views', 
    dotfiles: 'deny', 
    headers: { 
    'x-timestamp': Date.now(), 
    'x-sent': true 
    } 
}; 

router.get('*', function(req, res) { 
    return res.sendFile('index.html', options); 
}); 
+0

对不起。但究竟是什么设置? – Javier

+0

无需设置即可使用。谢谢。 – Javier