分析云:模块已被加载

Parse Cloud : Module already being loaded

本文关键字:加载 模块      更新时间:2023-09-26

我正在尝试使用nodejs的加密模块,并将所有必需的模块添加到我的云文件夹中,并根据需要更改了所有require('..')方法('cloud/..),但在部署到云时出错:

更新失败,无法加载触发器。错误为错误:模块cloud/stream.js已加载

在_stream_readable.js:26:14在流中js:28:19在crypto.js:40:14在main.js:3:14因为stream_readable.js需要stream.js,并且stream.js和stream_readaable.js之间存在循环依赖关系。

对于这种循环依赖关系,有什么解决方案或变通方法吗?

如文档中所示https://www.parse.com/docs/cloud_code_guide#modules

使用自己的模块时需要使用导出

var coolNames = ['Ralph', 'Skippy', 'Chip', 'Ned', 'Scooter'];
exports.isACoolName = function(name) {
  return coolNames.indexOf(name) !== -1;
}
var name = require('cloud/name.js');
name.isACoolName('Fred'); // returns false
name.isACoolName('Skippy'); // returns true;
name.coolNames; // undefined.

我也被困了几个星期。事实证明,NodeJS并不是解析云代码签名/验证的最佳选择(无论如何),但我确实找到了解决方案。

根据Chris Stewart在这里的回应,您可以使用jsrssign库。

以下是一个工作示例的云代码:

Parse.Cloud.define("verifySignature", function(request, response) {
    var KJUR = require('cloud/jsrsasign/npm/lib/jsrsasign.js');
    var strPubKey = '-----BEGIN PUBLIC KEY-----(snip)';
    // initialize
    var pubKey = KJUR.KEYUTIL.getKey(strPubKey);
    var data = request.params.data;
    var signature = request.params.signature;
    var verifier = new KJUR.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa"});
    // initialize for signature validation
    verifier.initVerifyByPublicKey(pubKey);
    // update data
    verifier.updateString(data);
    // verify signature
    if (verifier.verify(base64ToHex(signature))
        response.success("Signature verified");
    else
        response.error("Signature could not be verified"); 
}
function base64ToHex(str) {
  for (var i = 0, bin = atob(str.replace(/[ 'r'n]+$/, "")), hex = []; i < bin.length; ++i) {
    var tmp = bin.charCodeAt(i).toString(16);
    if (tmp.length === 1) tmp = "0" + tmp;
    hex[hex.length] = tmp;
  }
  return hex.join(" ");
}
function atob(base64) {
  var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var table = tableStr.split("");
  if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character");
  base64 = base64.replace(/=/g, "");
  var n = base64.length & 3;
  if (n === 1) throw new Error("String contains an invalid character");
  for (var i = 0, j = 0, len = base64.length / 4, bin = []; i < len; ++i) {
    var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A");
    var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A");
    if ((a | b | c | d) < 0) throw new Error("String contains an invalid character");
    bin[bin.length] = ((a << 2) | (b >> 4)) & 255;
    bin[bin.length] = ((b << 4) | (c >> 2)) & 255;
    bin[bin.length] = ((c << 6) | d) & 255;
  };
  return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4);
}