AngularJS - 如果网址不正确,则重定向

时间:2016-05-22 20:15:17

标签: angularjs

我在具有不同状态的angularjs中构建应用程序,并添加了$urlRouterProvider.otherwise("/");来重定向人员,他们不会进入我已设置的状态。

虽然我在访问超出我设置的网址时遇到问题。 例如,以下状态是配置文件:

.state('profile', {
      url: '/profile',
      templateUrl: 'partials/profile.html',
      controller: 'profileCtrl',
        data: {
            requiresLogin: true
        },
        resolve: {
          $title: function() { return 'Profile'; }
        }
    });

让我们说我要用/ prof而不是/ profile转到网址,我将重定向回家#(" /")。

问题出现在哪里:如果我按照以下方式转到网址:/ profile / test,我的控制台会出现很多错误(图片如下)

error log

额外信息(来自评论):

我还会给服务器端代码看一下重定向可能存在的问题:

// Init Express Web Framework
var express = require('express');
var app = express();
var path = require('path');

// Set view engine to EJS & set views directory
app.set('view engine', 'ejs');
app.set('views', path.resolve(__dirname, 'client', 'views'));

app.use(express.static(path.resolve(__dirname, 'client')));

// Database Connection
var mongoose = require('mongoose');
var configDB = require('./server/config/database.js');
mongoose.connect(configDB.url);

var bodyParser = require('body-parser');
app.use(bodyParser.json());

// Main route
app.get('/', function(req, res){
    res.render('index.ejs');
});

// API 
var api = express.Router();
require('./server/routes/capture')(api);
app.use('/api', api);

// Set routes to other pages
app.get('/*', function(req, res){
    res.render('index.ejs');
});

// Port Settings
app.listen(process.env.PORT || 3000, process.env.IP);
console.log('Listening on port ' + process.env.PORT);

这是我的工作区

workspace

重定向未列出的重定向网址。列出的网址(例如/ dashboard / / profile,...)在向链接添加内容时,它们不会被重定向。当我没有将控制器添加到主html时,我遇到了这些错误,但这只是事情..我不想冲浪到这些链接。所有未在app.js中声明的链接都应重定向。

有什么方法可以解决这个问题吗?

编辑 - 添加404:

我使用以下代码在server.js中添加了一个catch 404:

    // catch 404 and forwarding to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

结果如下:

Error: Not Found
   at /home/ubuntu/workspace/server.js:31:15
   at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5)
   at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13)
   at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7
   at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12)
   at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10)
   at jsonParser (/home/ubuntu/workspace/node_modules/body-parser/lib/types/json.js:100:40)
   at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5)
   at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13)
   at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7
   at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12)
   at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10)
   at SendStream.error (/home/ubuntu/workspace/node_modules/express/node_modules/serve-static/index.js:120:7)
   at emitOne (events.js:77:13)
   at SendStream.emit (events.js:169:7)
   at SendStream.error (/home/ubuntu/workspace/node_modules/express/node_modules/send/index.js:245:17)

1 个答案:

答案 0 :(得分:0)

Unexpected token "<"通常是指html内容而不是js angular is not defined表示您的angular.js甚至无法加载。

检查浏览器中的服务器和Network标签 用于加载js脚本的网址是什么? 浏览器对这些网址的响应是什么?

修正js url更正并且错误将消失。

您的.htaccess也可能出错 检查您是否没有重定向其中存在的静态文件 它是-f指令中的RewriteRule标志。

我看看你的错误动画:)

您的脚本定义为src="lib/angular.js" 此网址是相对的,在/profile页面上将为/profile/lib/...

您需要的是绝对网址:src="/lib/angular.js"