在流星中使用Crypto.js

时间:2013-07-26 21:18:47

标签: javascript include global-variables meteor

我试图在meteor js app(meteor版本0.6.4.1)中包含一些crypto.js库。

当我将内容复制并粘贴到server / main.js文件中时,它工作正常,但这使得它非常难以阅读。

当我将库放在服务器目录中的单独文件中时(我也尝试将它们放在lib目录中)我收到错误ReferenceError: CryptoJS is not defined

server / main.js的要点:

Meteor.methods({
    encrypt:function(bundleID){
        return CryptoJS.HmacSHA256(string, 'something');
    }
});

我也尝试从

更改hmac-sha256.js文件的第一行
var CryptoJS=CryptoJS||function(h,s){...

为:

CryptoJS=CryptoJS||function(h,s){...

使它全球化,但这也行不通。如何正确包含此库?

3 个答案:

答案 0 :(得分:4)

在你的应用程序中,dir创建文件夹'packages / cryptojs'并将文件放在那里:

  • HMAC-sha256.js
  • ENC-的base64 min.js
  • package.js

packages / cryptojs / package.js

Package.describe({
  summary: "CryptoJS"
});

Package.on_use(function (api, where) {
  api.add_files(['hmac-sha256.js'], ['client','server']);
  api.add_files(['enc-base64-min.js'], ['client','server']);
});

您需要通过更改第7行的开头来修改 hmac-sha256.js

var CryptoJS=CryptoJS||function(h,s){

为:

CryptoJS=function(h,s){

之后,您可以使用它:

var hash = CryptoJS.HmacSHA256("Message", "secret");
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);    
console.log(hashInBase64)

Example source

答案 1 :(得分:1)

我作为parhelium的指南,但仍然无法工作,然后我找到了解决此问题的新方法: 只需将hmac-sha512.js中的第7行替换为此行以全局化CryptoJS对象:

this.CryptoJS=this.CryptoJS

修复其他cryptojs的相同内容。要与Base64一起使用,必须确保在其他库之后加载base64.js。

答案 2 :(得分:0)

发生这种情况的原因是由于流星的变量范围。尝试将cryptojs库文件放在/server/compatibility中。这样可以在其他文件中访问cryptojs库。

通过删除cryptojs源文件中使用的/compatibility,您也可以在不将其放入var的情况下使其正常工作。问题是,如果你这样做,更难以保持文件最新。