2016-04-17 21 views
1

我是學習expressjs和nodejs的新手。我需要使用ui.router進行路由的幫助。我真的不知道如何解釋這與我如此裸露。Node.js和expressjs路由到另一個文件夾

我的文件夾結構如下所示:

enter image description here

在我app.jsjavascripts下看起來是這樣的:

var app = angular.module('testing', ['ui.router']); 

app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: '/home.html' 
    }) 
    .state('client_form', { 
     url: '/request', 
     templateUrl: '/client.html', 
     controller: 'MainCtrl' 
    }); 

    $urlRouterProvider.otherwise('home'); 
}]); 

index.ejs看起來是這樣的:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Testing</title> 
     <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 

     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script> 
     <script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.js"></script> 
     <script src="/javascripts/app.js"></script> 
    </head> 

    <body ng-app="testing"> 

     <div class="col-md-6 col-md-offset-3"> 
      <ui-view></ui-view> 
     </div> 

    </body> 
</html> 

home.ejs

<div class="page-header text-center" style="font-size:45px"> 
    Hacker List 
</div> 

<div class="text-center"> 
    <a href="worker.html"> 
     <button type="submit" class="btn btn-primary btnBig">Worker</button> 
    </a> 

    <br /> 

    <a href="Client.html"> 
     <button type="submit" class="btn btn-primary btnBig">Client</button> 
    </a> 
</div> 

當我做npm start和去的網站,我得到的是沒有找到home.html無限循環。

我可以使home.ejs中的代碼出現,如果我使用<script type="text/ng-template" id="/home.html">HOME_CODE_HERE</script>內聯在index.ejs內部;但是,我不想這樣做。

我不知道如何解決這個問題,任何幫助將不勝感激。謝謝!

回答

2

ui.router是AngularJS,而不是NodeJS。 可能是無限循環問題出在你的前端,而不是NodeJS路由。因爲在AngularJS問題之外,我會說Express路由在後端,所以在一個請求(來自Angular,瀏覽器,鏈接,重定向等)之後,工作所需的責任和配置在NodeJS + Express中+ EJS。

假設您向/index.html發出請求。一旦請求進入後端,NodeJS將假定如何處理它。

因此,爲了確保您在NodeJS中沒有問題,請檢查您的app.js(用於節點 - 可能位於項目的根目錄中)。這可能與此相似的路由配置:

var express = require('express'); 
 

 
var app = express(); 
 

 
// EJS template config 
 
app.set('views','./views'); 
 
app.set('view engine','ejs'); 
 

 
app.use(bodyParser.urlencoded({ extended: true })); //support x-www-form-urlencoded 
 
app.use(bodyParser.json()); 
 

 
// This is your routes 
 
app.get('/', function(req, res) { 
 
    // Your code for index 
 
    res.render('views/index', { param : "This is a EJS test" }); 
 
}); 
 

 
app.get('/index.html', function(req, res) { 
 
    // Your code for index 
 
    res.render('views/index', { param : "This is a EJS test" }); 
 
}); 
 

 
app.get('/anotherPage.html', function(req, res) { 
 
    // Your code for another page: can include validations here 
 
    res.render('views/anotherPage', { param : "This is a EJS test" }); 
 
});

現在你會你的路線設定的NodeJS,那麼你可以設置你的EJS文件。你的home.ejs可以完全一樣。 index.ejs文件會有點不同。也許你可以把它寫像這樣(我刪除AngularJS從它用於測試目的):

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Testing</title> 
 
     <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 
 
    </head> 
 

 
    <body> 
 
     This is a parameter from the back-end: <%= param %> 
 
     This is the index of EJS template. Below the snipped inserted: 
 
     <div class="col-md-6 col-md-offset-3"> 
 
       <% include home.ejs %> 
 
     </div> 
 

 
    </body> 
 
</html>

有關於快遞GitHub的頁面路線和EJS一些很好的例子: https://github.com/expressjs/express/tree/master/examples

我認爲消除NodeJS的問題可以幫助您解決似乎在AngularJS中出現的問題。

希望它有某種幫助。

+1

謝謝,這是非常有益的! –