2016-07-30 113 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