2013-07-15 107 views
2

我正在使用Angular,express,nodeJS進行Web應用程序開發。AngularJS和ExpressJS路由問題?

Anuglar代碼:

'use strict'; 
// 
Declare app level module which depends on filters, and services 
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers']). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MyCtrl1'}); 
    $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'}); 
    $routeProvider.otherwise({redirectTo: '/view1'}); 
    }]).config(['$locationProvider', function($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]);; 


angular.module('modelDemo', []). 
config(function ($routeProvider) { 
    $routeProvider. 
    when('/', { 
     controller: 'AuthorListCtrl', 
     templateUrl: 'partials/list.html' 
    }); 
    $routeProvider. 
    when('/view1', { 
     controller: 'MyCtrl1', 
     templateUrl: 'partials/partial1.html' 
    }); 
    $routeProvider.otherwise({redirectTo: '/view1'}) 
}); 

var app = angular.module('app', ['myApp', 'modelDemo']); 

快速代碼

// all environments 
app.set('port', process.env.PORT || 2000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(app.router); 

app.get('/', wine.index); 
app.get('/partials/:name', wine.partials); 
app.get('/wines', wine.findAll); 
///app.get('/view1', wine.index); 
app.get('/wines/:id', wine.findById); 
app.post('/wines', wine.addWine); 
app.put('/wines/:id', wine.updateWine); 
app.delete('/wines/:id', wine.deleteWine); 
app.get('/view1', wine.partials); 
//app.get('/view1/:name', wine.partials); 

2)

exports.index = function(req, res){ 
    console.log("request url---"+req.url); 
    res.render('partials/' + req.params.name); 
}; 

exports.partials = function(req, res) { 
    console.log("request url---"+req.url); 
    console.log(req.params.name); 
    res.render('partials/' + req.params.name); 
}; 

項目文件夾結構: Folder stru

當我嘗試用下面的URL訪問這個應用程序, http://www.domain:2000/view1

我收到以下錯誤,

Error: Failed to lookup view "partials/undefined" at Function.app.render (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\application.js:494:17) at ServerResponse.res.render (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\response.js:756:7) at exports.partials (d:\era\startup\learnnod\restfull_angular2\routes\wines.js:104:9) at callbacks (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\router\index.js:161:37) at param (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\router\index.js:135:11) at pass (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\router\index.js:142:5) at Router._dispatch (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\router\index.js:170:5) at Object.router (d:\era\startup\learnnod\restfull_angular2\node_modules\express\lib\router\index.js:33:10) at next (d:\era\startup\learnnod\restfull_angular2\node_modules\express\node_modules\connect\lib\proto.js:190:15) at resume (d:\era\startup\learnnod\restfull_angular2\node_modules\express\node_modules\connect\lib\middleware\static.js:60:7)

請讓我知道如果你需要它的詳細信息

+0

什麼是代碼指向這裏(d:\時代\啓動\ learnnod \ restfull_angular2 \路徑\ wines.js:104:9)在回調 – user568109

+0

新增wines.js: 104代碼在Quesiton, – niran

+0

你可能想刪除app.set('view engine','jade'); –

回答

5

問題是,您正在嘗試處理您的角碼和您的快遞代碼中的路線。爲了讓它按預期工作,您需要將所有非部分/非API路線導向到您的index.html文件。

試着做這樣的事情:

wine.js(您的明確路線文件)

exports.index = function(req, res) { 
    res.sendfile(__dirname + "/public/index.html"); // updated to reflect dir structure 
}; 

app.js(您的明確程序文件)

... 
// make this your last route and remove your '/view1' route 
app.get('*', wine.index); 
... 
+0

不,我不想在這個項目中使用Jade – niran

+0

這是否意味着yourdirectory = public,根據我的問題 – niran

+0

中顯示的文件夾結構我相信這是正確的。 –

0

在您的wine.js中,您使用參數name,但在您的路線中,您已評論一部分。

app.get('/view1', wine.partials); 
//app.get('/view1/:name', wine.partials); 

既然你沒有指定帕拉姆:name的路線,當您嘗試與req.params.name訪問它給出了定義。並且您查找不存在的文件undefined

Error: Failed to lookup view "partials/undefined" at Function.app.render 

你可能想res.render('partials/view1');

+0

不,它不會工作。我也嘗試過這個選項。仍然有同樣的錯誤。我認爲,anuglr路由器和快速路由器 – niran

+0

/view1 /之間存在不匹配:名稱與「http://www.domain:2000/view1」不匹配。你是否在傳遞一些名稱的變量來測試它?這是一個快速路由器錯誤。 – user568109

+0

是的,根據角路由器定義view1 = partials/partial1.html。這意味着,當你說/ view1時,它只不過是一個www.domain.com/partial/partials.html。 – niran