gpt4 book ai didi

javascript - 将 JSJWS 和 XMLHttpRequest.js 库导入 Node.js

转载 作者:行者123 更新时间:2023-12-02 14:12:18 25 4
gpt4 key购买 nike

我有一个小的 javascript 模块,可以生成在标准浏览器上完美运行的签名证书,但我需要将其移植到运行 node.js 的服务器上,我正在使用 Koen 建议的技术,这里Load “Vanilla” Javascript Libraries into Node.js ,并按照他的建议包装三个库

var jsjws = {};
( function(jsjws) {
.....
})(jsjws);
console.log("jsjws",jsjws);
module.exports = jsjws

等等。经过一番努力,我设法让 jsjws 库正常工作,然后发现我还需要(为了兼容性)移植标准 XMLHttpRequest 库。在 npm 网站上,他们有一个库的下载 XMLHttpRequest 。但是它不想使用给定的 require 语法导入,即

var XMLHttpRequest = require("./node_modules/XMLHttpRequest/xmlhttprequest.js").XMLHttpRequest;;

给出的错误消息是:

[0] => jsjws {} 1 => module.js:327 2 => throw err; [3] => ^ [4] => [5] => Error: Cannot find module './node_modules/XMLHttpRequest/xmlhttprequest.js' [6] => at Function.Module._resolveFilename (module.js:325:15) [7] => at Function.Module._load (module.js:276:25) [8] => at Module.require (module.js:353:17) [9] => at require (internal/module.js:12:17) [10] => at Object. (C:\xampp-5.6.23\htdocs\

我正在使用的代码如下所示,如果您能深入了解它为何不起作用,我将不胜感激。话虽如此,当 XMLHttpRequest.js 与源文件位于同一目录中时,它确实可以使用 node-debug 工作。

eval(require('fs').readFileSync('./node_modules/jsjws/jws-3.2.js', 'utf8'));
eval(require('fs').readFileSync('./node_modules/jsjws/jsrsasign.js.js', 'utf8'));
var XMLHttpRequest = require("./node_modules/XMLHttpRequest/xmlhttprequest.js").XMLHttpRequest;

var pHeader = {"alg":"RS256","typ":"JWT"}
var sHeader = JSON.stringify(pHeader);

var pClaim = {};
pClaim.aud = "https://www.googleapis.com/oauth2/v3/token";
pClaim.scope = "https://www.googleapis.com/auth/fusiontables";
pClaim.iss = "cl@routesproofofconcept.iam.gserviceaccount.com";
pClaim.exp = KJUR.jws.IntDate.get("now + 1hour");
pClaim.iat = KJUR.jws.IntDate.get("now");

var sClaim = JSON.stringify(pClaim)
var key = "-----BEGIN PRIVATE KEY-----\nMF+ZY....";
var sJWS = KJUR.jws.JWS.sign(null, sHeader, sClaim, key);
var XHR = new XMLHttpRequest();
var urlEncodedData = "";
var urlEncodedDataPairs = [];

urlEncodedDataPairs.push(encodeURIComponent("grant_type") + '=' + encodeURIComponent("urn:ietf:params:oauth:grant-type:jwt-bearer"));
urlEncodedDataPairs.push(encodeURIComponent("assertion") + '=' + encodeURIComponent(sJWS));
urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+');

// We define what will happen if the data are successfully sent
XHR.addEventListener('load', function(event) {
var response = JSON.parse(XHR.responseText);
console.log(response)
token = response["access_token"]
console.log(token);
});

最佳答案

好吧,只需更改源文件中 XMLHttpRequest 函数的声明即可解决此问题

exports.XMLHttpRequest = function() {

XMLHtexportstpRequest = function() {

并放置exports.XMLHtexportstpRequest = XMLHtexportstpRequest;在源文件的底部。

最后,我使用 eval 导入它,即

    eval(require('fs').readFileSync('./node_modules/XMLHttpRequest/xmlhttprequest.js', 'utf8'));

现在整个应用程序可以运行了。我希望这对将来的其他人有帮助。

顺便说一下,在解决这个问题的过程中,我发现了我认为对 node.js 的最佳描述 module loading strategy

关于javascript - 将 JSJWS 和 XMLHttpRequest.js 库导入 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39422171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com