node.js - 尝试在工作线程中加载bcrypt时出现“模块未自注册”错误

标签 node.js bcrypt worker-thread

有问题的样本项目:https://github.com/Suvitruf/bcrypt-child-process-crash-proof

const {Worker, isMainThread} = require('worker_threads');

if(isMainThread)
    console.log("I'm ok, because I'm alpha main");
else
    console.log("I'm sad, because I can't load bcrypt");

const bcrypt = require('bcrypt');

function runTestWorker(workerData) {
    return new Promise((resolve, reject) => {
        const worker = new Worker('./index.js', workerData);

        worker.on('message', resolve);
        worker.on('error', reject);
        worker.on('exit', (code) => {
            if (code !== 0)
                reject(new Error(`Worker stopped with exit code ${code}`));
        })
    })
}

async function run() {
    const result = await runTestWorker('I will crash your app  (。•́︿•̀。)');
    console.log(result);
}

if(isMainThread)
    run().catch(err => console.error(err));


如果尝试在工作线程中加载bcrypt,则会出现错误:

Error: Module did not self-register.
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:779:18)
    at Module.load (internal/modules/cjs/loader.js:630:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
    at Function.Module._load (internal/modules/cjs/loader.js:562:3)
    at Module.require (internal/modules/cjs/loader.js:667:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (O:\Texts\Sources\my\bcrypt-child-process-crash-proof\node_modules\bcrypt\bcrypt.js:6:16)
    at Module._compile (internal/modules/cjs/loader.js:738:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
    at Module.load (internal/modules/cjs/loader.js:630:32)


信息:


节点v11.10.0
bcrypt v3.0.4


我该如何解决?

最佳答案

同样的问题,这似乎是bcrypt自身的问题。

解决此问题的临时方法:

const { isMainThread } = require("worker_threads");

var bcrypt;
if (isMainThread) bcrypt = require("bcrypt");

let bcryptFunction = (...param) => {
  if (bcrypt == undefined) return Promise.reject("Not in main threads")
  return bcrypt.hash(...param)
}

关于node.js - 尝试在工作线程中加载bcrypt时出现“模块未自注册”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55061231/

相关文章:

node.js - 表达:找不到命令,以前工作过吗?

javascript - 表达 js,mongodb : “ReferenceError: db is not defined” when calling a function

java - 无法使用创建的bean

node.js - Bcrypt 在 Linux 上安装失败

c++ - 有没有办法在 Qt GUI 应用程序的工作线程中使用 OpenGL 安全地绑定(bind)纹理?

javascript - Node 和 Socket.IO - 私有(private)聊天(一对一)

node.js - Nodejs-console.error vs util.debug

javascript - Node 的 bcrypt 和 bcryptjs 库有何不同?

javascript - HTML5 应用程序中的后台数据下载到浏览器数据库 - settimeout 与工作线程

sleep (挂起)和恢复窗口窗体在工作线程而不是主线程上启动程序