Angular 和 NodeJS 中的路由问题 [angular]

Posted

技术标签:

【中文标题】Angular 和 NodeJS 中的路由问题 [angular]【英文标题】:Routing trouble in Angular & NodeJS [angular] 【发布时间】:2013-05-14 23:26:11 【问题描述】:

我对 Angular js 有疑问, 我已经创建了 login.html 和 home.html .. 成功登录后,我想将页面更改为 home.html。

我的路由不工作,默认 url 是 localhost/angular

我尝试路由 localhost/angular/view/home.html 的“真实路径”,但仍然不行

我的文件夹和文件顺序

angular(保存 angular lib 的文件夹) app(保存 app.js 我的路由的文件夹) 查看(文件夹保留我的 home.html) login.html(作为我的索引) server.js(node.js 作为我的服务器) user_auth.js(登录功能)

我的 login.html 代码

<html ng-app="myApp" >
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

    <script src="angular-1.0.6/angular.js"></script>
    <script src="app/js/app.js"></script>

</head>
<title>Desainku</title>
<body>
<h2>Login</h2>

        <div  ng-controller="ajaxCtrl" >

           <p>
                <label>Username:</label>
                <input type="text" name="username" ng-model="username" />
            </p>
            <p>
                <label>Password:</label>
                <input type="password" name="password" ng-model="password" />
            </p>

            <input type="submit" value="submit" ng-click="submitPost()" />   
        <p>result</p>

</div>
</body></html>

我的 app.js 代码(路由和发送服务器)

var app = angular.module('myApp', []);
app.config(['$routeProvider','$locationProvider',function($routeProvider, $locationProvider) 
    $locationProvider.html5Mode(true);
    $routeProvider.when('/angular/home', 
        templateUrl: 'view/home.html',
        controller : 'homeCtrl'
    );
]);
function homeCtrl($scope)
    alert('someone call me');

app.controller('ajaxCtrl', function($scope, $location) 
    var url = "http://localhost:7788/login";
    $scope.submitPost = function() 
        $.ajax(
            url: url,
            type: 'POST',
            dataType: 'json',
            data: username: $scope.username, password: $scope.password,
            success: function(data) 
                $scope.$apply(function()
                $scope.result=data.message;
                    if (data.status === 'true') 
                        alert($location.path());
                        $location.path('home').replace();
                
                );
           ,
            error: function(data) 
                alert('Error get data from server');
            
        );
    ;
);'

我的 server.js 和 user_auth.js 代码

------------server
    var express     = require ('express'),
        app         = new express(), 
        calldb      = require ("./user_auth.js"),
        fs          = require('fs');
    app.post('/login',calldb.login);

------------user_auth

exports.login = function(req, res) 
    connDB.check_user(req.body, function(err) 
        console.log(req.header);
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Content-Type,X-Requested-With");
        if (err) 
            res.send(JSON.stringify(status: 'false', message: 'Error login'));

         else 
            res.send(JSON.stringify(status: 'true', message: 'Succesfull login'));
        
    );
;

【问题讨论】:

而不是$location.path('home').replace(), could you simply write $location.path('/angular/home')` 并检查它是否有效? 【参考方案1】:

替换 app.js 代码

var app = angular.module('myApp', []);
app.config(['$routeProvider','$locationProvider',function($routeProvider, $locationProvider) 
  $locationProvider.html5Mode(true);
  $routeProvider.when('/angular/home', 
    templateUrl: 'view/home.html',
    controller : 'homeCtrl'
  );
]);
function homeCtrl($scope)
  alert('someone call me');

app.controller('ajaxCtrl', function($scope, $window) 
  var url = "http://localhost:7788/login";
  $scope.submitPost = function() 
    $.ajax(
      url: url,
      type: 'POST',
      dataType: 'json',
      data: username: $scope.username, password: $scope.password,
      success: function(data) 
        $scope.$apply(function()
        $scope.result=data.message;
          if (data.status === 'true') 
            alert($location.path());
            //$location.path('home').replace();
            return $window.location.href = 'home.html';
           
        );
      ,
   error: function(data) 
     alert('Error get data from server');
   
  );
 ;
);

我会试试它的工作原理。

【讨论】:

【参考方案2】:

用户2401192,

首先你需要在你的 html 中声明 ng-view :

    <div ng-view></div>

现在当你的 templateUrl 改变时(例如你执行 $location.path('home').replace(); ),

$routeProvider.when('/angular/home', 
    templateUrl: 'view/home.html',
    controller : 'homeCtrl'
);

您的ng-view 将替换为新网址的内容。在这种情况下view/home.html

我想补充两点:

    不要使用经典的 $.ajax(..),使用 $http 服务,因为它具有 Promise API 的良好优势,以及非常有用的 http 拦截器(可能听起来不多,但它们是 - 例如显示加载启动或拦截 403 Unauthorized 请求。 什么都没有 :),实际上只有一件事。

【讨论】:

以上是关于Angular 和 NodeJS 中的路由问题 [angular]的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 和 Angular 应用程序使用 JWT 发送 401 Unauthorized 和 200 OK

angular2 - 使用路由器问题

Angular 4 路由

使 Angular 路由与 Express 路由一起工作

Express.js 或 Angular 用于在 MEAN 应用程序中处理路由?

Angular 2 Universal 中的身份验证,nodejs