AngularJs ReferenceError:require未定义

时间:2015-09-24 01:07:55

标签: javascript angularjs node.js

我知道还有其他关于这个问题的问题,但我已经准备好了10个以上的答案并尝试了每一个答案,但没有一个能为我工作。

当我尝试加载外部普通javascript文件以在JWT中进行编码时,我收到此错误:Uncaught ReferenceError: require is not defined

这是我尝试在require()中添加的文件:https://github.com/hokaccha/node-jwt-simple我已使用npm下载。

在我的代码中,我尝试了很多东西。

  • main.js中包含grunt concact;
  • 使用<head>;
  • <script src="path/to/folder"></script>内手动加载
  • 使用npm为nodeJs安装RequireJs;

通过所有这些尝试,我得到了同样的错误。我做错了什么?

这是我现在正在使用的代码:

的index.html

<head>
<script type="text/javascript" src="dist/js/angular.min.js"></script>
<script type="text/javascript" src="dist/js/ui-router.min.js"></script>
<script type="text/javascript" src="dist/js/jwt.js"></script>
[... rest of head ...]

appCtrl.js (稍后将使用该应用的其余部分进行构建)

.controller('MainCtrl', 
    ['$rootScope', '$scope', '$state', 
    function($rootScope, $scope, $state) {
        var jwt = require('jwt');
        var payload = { foo: 'bar' };
        var secret = 'xxx';
        var token = jwt.encode(payload, secret);
        console.log(token);
}])

我的主要目标是基于JWT令牌处理用户身份验证。现在的问题是当用户登录应用程序时对令牌进行编码/解码。

即使有了所有这些,我仍然会收到错误。你们知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

如果您想在客户端上使用UNSELECTED,则需要使用Browserifywebpack之类的内容(我绝对推荐使用后者)。

您收到该错误的原因是,事实上,您从未在客户端代码的任何位置定义require。 JWT回购没有为您提供该功能。

另外,查看您提供的JWT仓库的文档,看来它希望您在node.js环境中使用它(它为您提供commonjs require。)

答案 1 :(得分:0)

在服务器端(即server.js文件),对于节点,请使用:

var jwt = require('jwt-simple');

然后,编码:

var secret = "Ieaticecreamforbreakfast";

并在您的登录功能中......一旦您检查登录条件

var token = jwt.encode({id: ID, otherInfo: "can go here"}, secret); 

res.send({token: token});

然后,您可以将响应令牌设置为您的角度前端中的其他http请求的标头。因此,只要用户向后端发出请求,您就可以在JWT中访问其编码ID