golang 执行js代码。 调试及 goja 中js 代码报错 require

本文介绍了在Goja环境中模拟前端密码js加密的步骤,包括使用jsencrypt库解决window对象不支持的问题,以及处理import或require导入错误。通过在VSCode中配置coderunner和Node.js环境,调试并运行含有加密功能的js代码,并在Go中调用加密函数进行测试。文章提供了详细的操作指南和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟前端密码js加密,后端测试时使用

使用goja

目录

模拟前端密码js加密,后端测试时使用

1、js代码报错,调试js 代码

2、前端加密使用jsencrypt,遇到问题

3、import 或 require 报错。


遇到的问题:

1、js代码报错,调试js 代码

Visual Studio Code  中安装code runner插件

安装node 

修改vs code配置settings.json 中增加行

"code-runner.runInTerminal":true,

"code-runner.executorMap":{ "javascript": "D:\\\\tools\\nodejs\\node.exe", },

2、前端加密js使用jsencrypt,遇到问题

 https://github.com/travist/jsencrypt.git

遇到问题

1)bin目录下文件jsencrypt.min.js,会报错 不支持window对象 

使用https://studygolang.com/articles/35387?fr=sidebar

修改的文件。

3、import 或 require 报错。

支持的js 语法目前只支持require。同时要增加下面的注册

registry := new(require.Registry)
    registry.Enable(vm) 


import (
	"fmt"
	"os"

	"encoding/base64"

	"github.com/dop251/goja"
	"github.com/dop251/goja_nodejs/require"
	"github.com/wumansgy/goEncrypt"
)

func JsDoEncrypt(inV string) (outEncV string, err error) {
	var script = `		
	function GenEnc(inV, pubKey) {
		const jsencrypt = require('./jsencrypt.min.js');
		let encrypt = new jsencrypt.JSEncrypt();
		encrypt.setPublicKey(pubKey);
		return encrypt.encrypt(inV);	
	}	
	`
	//
	vm := goja.New()
	registry := new(require.Registry)
	registry.Enable(vm)

	_, err = vm.RunString(script)
	if err != nil {
		// global.G_LOG.Info("[%s]JS代码有问题",w.TraceId)
		fmt.Println("JS代码有问题")
		return
	}
	var fn func(string, string) string
	err = vm.ExportTo(vm.Get("GenEnc"), &fn)
	if err != nil {
		fmt.Println("Js函数映射到 Go 函数失败!")
		return
	}
	//
	file, err := os.Open("public.pem")
	if err != nil {
		fmt.Println("open publicKey file err:", err)
		return
	}
	defer file.Close()
	//获取文件内容
	info, _ := file.Stat()
	buf := make([]byte, info.Size())
	file.Read(buf)
	//
	outEncV = fn(inV, string(buf))
	// fmt.Println("加密后为:", outEncV)
	return
}

       参考文章:

https://www.cnblogs.com/ZYSZBD/p/14929855.html

https://studygolang.com/articles/35387?fr=sidebar

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值