Node.js AngularJS和ExpressJS路由问题?

Node.js AngularJS和ExpressJS路由问题?,node.js,angularjs,express,Node.js,Angularjs,Express,我正在使用Angular、express和nodeJS进行web应用程序开发 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(['$rou

我正在使用Angular、express和nodeJS进行web应用程序开发

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);
(二)

项目文件夹结构:

当我尝试使用以下url访问此应用程序时,

我有以下错误

错误:无法查找视图“部分/未定义” 在Function.app.render(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\application.js:494:17) 在ServerResponse.res.render(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\response.js:756:7) 在exports.partials(d:\era\startup\learnnod\restfull\u angular2\routes\wines.js:104:9) 在回调时(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\router\index.js:161:37) at参数(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\router\index.js:135:11) 通过时(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\router\index.js:142:5) 路由器调度(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\Router\index.js:170:5) 在Object.router(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\lib\router\index.js:33:10) 下一步(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\node\u modules\connect\lib\proto.js:190:15) 在恢复时(d:\era\startup\learnnod\restfull\u angular2\node\u modules\express\node\u modules\connect\lib\middleware\static.js:60:7)


如果您需要更多信息,请告诉我。

问题是您正在尝试处理角度代码和快速代码中的路线。为了让它按预期工作,您需要将所有非部分/非api路由定向到index.html文件

尝试这样做:

wine.js(您的快速路线文件)

app.js(您的express应用程序文件)


在wine.js中,您使用的是参数
name
,但在路线中,您已对零件进行了注释

app.get('/view1', wine.partials);
//app.get('/view1/:name', wine.partials);
由于您没有在路由中指定参数
:name
,当您尝试使用
req.params.name
访问它时,它会给出未定义的参数。然后查找一个不存在的未定义的文件

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

您可能需要
res.render('partials/view1')

在CallbackAdded wines.js:104代码在问题中,您可能想删除app.set('view engine','jade');删除视图引擎后,出现以下错误:未指定默认引擎,也未提供扩展名。不,我不想在此项目中使用Jade,这是否意味着yourdirectory=public,根据问题中显示的文件夹结构,我确实为我工作过。谢谢:)但我不明白为什么app.get(“*”,…)是Recuriedit,因为所有页面请求都需要发送到index.html文件。加载应用程序后,Angular将使用pushState操作URL并处理路由。但是,如果要将页面或deeplink刷新为角度路由,Express将尝试处理该路由。将其发送到所有路由上的索引将允许Angular处理路由。抱歉。我错过了聊天请求不,它不会工作。我也尝试过这个选择。还是有同样的错误。我认为,anuglr路由器和express router/view1/之间不匹配:名称不匹配
http://www.domain:2000/view1
。您是否为name传递了一些变量来测试它?这是一个快速路由器错误。是的,根据角度路由器定义view1=partials/partial1.html。这意味着,当你说/view1时,它只不过是一个,www.domain.com/partial/partials.html.Express路由器对angular路由器一无所知。因此,您必须自己给出正确的路径。尝试
res.render('partials/partial1')错误:无法查找视图“partials/partial1”,当调用app.get('/view1',wine.partials)时,它将调用exports.partials=function(req,res){res.render('partials/partial1')}。我想这就是问题所在。
...
// make this your last route and remove your '/view1' route
app.get('*', wine.index);
...
app.get('/view1', wine.partials);
//app.get('/view1/:name', wine.partials);
Error: Failed to lookup view "partials/undefined" at Function.app.render