2017-11-29 7 views
0

私はElectronの新機能で、sqlanywhereパッケージを使用して問題が発生しています。ノードエレクトロンでSQLAnywhereの問題が発生する - エラー:モジュールをロードできませんでした

私は非常に基本的なテストを行っています。ドライバをロードしようとするとすぐにsqlanywhereがエラーをスローしています。このアプリケーションでElectronを使用するまで、これは正常に動作することに注意してください。

は、ここに私のサンプルコードです:

const sqlanywhere = require('sqlanywhere'); 
const url = require('url'); 
const path = require('path'); 
const { app, BrowserWindow, Menu, Tray, ipcMain } = require('electron'); 

let conn = sqlanywhere.createConnection(); 

var conn_params = { 
    Host : 'localhost:2638', 
    UserId : 'user', 
    Password: 'password', 
    ConnectionPool: 'YES(MaxCached=10)' 
}; 


conn.connect(conn_params, function(err) { 

    if (err) throw err;  

    conn.exec('SELECT * from mytable', function (err, result) {  
     if (err) throw err; 
     console.log(result[0]);  
     conn.disconnect(); 
    }) 
}); 



let mainWindow; 

    app.on('ready',() => { 

    console.log("Started..."); 

    // Create Window 
    mainWindow = new BrowserWindow({ 
     width: 200, 
     height: 200   
    }); 

    // Load HTML file into Window 
    mainWindow.loadURL(url.format({ 
     pathname: path.join(__dirname, 'mainWindow.html'), 
     protocol: 'file:', 
     slashes: true 
    }));  



}); 

スローエラーは次のとおりです。

「キャッチされない例外:エラー: 'win32の'、プロセスアーチ:プラットフォーム用のモジュールをロードできませんでした 'x64の'バージョン: 'v7.9.0」

エレクトロンがsqlanywhereパッケージの' require 'ステートメントを処理する方法が問題を引き起こしているようです。

私は上記のcatchブロックを確認するために、2つのにconsole.logステートメントを追加しました
// *************************************************************************** 
    // Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. 
    // *************************************************************************** 
    var db = null; 
    var driver_file = "sqlanywhere" 

    var v = process.version; 
    var match = v.match('v([0-9]+)\.([0-9]+)\.[0-9]+'); 
    driver_file += '_v' + match[1]; 
    if(match[1]+0 == 0) { 
     driver_file += '_' + match[2]; 
    } 

    try { 
     if(process.arch == "x64") { 
     db = require("./../bin64/" + driver_file); 

     } else if(process.arch == "ia32") { 
     db = require("./../bin32/" + driver_file); 

     } else { 
     throw new Error("Platform Not Supported"); 
     } 
    } catch(err) { 
     try { 
     // Try finding natively compiled binaries 
     console.log("Error thrown"); // added by me 
     console.log("DB: " + db); // db is null 
     db = require("./../build/Release/sqlanywhere.node"); 
     } catch(err) { 
     throw new Error("Could not load modules for Platform: '" + 
       process.platform + "', Process Arch: '" + process.arch + 
       "', and Version: '" + process.version +"'"); 
     } 
    } 
    module.exports = db; 

が実行されている、それがロードされている必要がある場合、そのdbが、この時点ではまだnullの場合:SQLAnywhereののindex.jsですx64ドライバこれも、Electronが関与するまで機能します。

誰もが、私は永遠に感謝だろう任意の洞察力を提供することができれば電子が

db = require("./../bin64/" + driver_file);

に問題ができるようです!

ありがとうございました

答えて

0

あなたがロードしようとしているモジュールがネイティブモジュールを含んでいると仮定します。ネイティブモジュールでは、node.jsプロセスとコンパイルされたバイナリのバージョンが一致する必要があります。つまり、node.jsのバージョンがノードのインストールとElectronの間で一致しない場合、モジュールはロードできません。それらの特定のバージョンを一致させるか、https://github.com/electron/electron-rebuildを使用して正しいバイナリを生成します。

+0

電子リビルドを使用してこれを解決できました –

関連する問題