分析云:模块已被加载
Parse Cloud : Module already being loaded
我正在尝试使用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);
}
相关文章:
- 使用RequireJS从数组动态加载模块
- NgRoute未加载(模块错误)
- 动态加载模块角度
- RequireJS - 动态加载模块
- 无法在 Angular JS 中加载模块
- 从视图调用异步加载模块函数
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- Webpack - 在不创建别名的情况下加载模块
- Jasmine 由于 ES6 语法而未加载模块
- 角度AMD加载模块不起作用
- 带有 angularjs 和 requirejs 的延迟加载模块
- RequireJS 有时不加载模块
- Require.js甚至在IF语句中也在加载模块
- AngularJS加载模块失败
- 节点未从项目根目录加载模块
- 通过requirejs自动加载模块
- 在运行时重新加载模块
- 动态命名的局部变量,用于加载模块
- RequireJS-加载模块的多个实例
- 无法在HotTowel SPA上加载模块