2017-11-29 16 views
0

전자 제품을 처음 사용했으며 SQL Server와 함께 sqlanywhere 패키지를 사용하는 데 문제가 있습니다.Node Electron SQLAnywhere 관련 문제 - 오류 : 모듈을로드 할 수 없습니다.

나는 매우 기본적인 테스트를 수행하고 있으며 드라이버를로드하려고 시도하면 sqlanywhere에서 오류가 발생합니다. 이 응용 프로그램에서 전자가 포함될 때까지이 작동합니다.

여기 내 예제 코드입니다 :

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에서'프로세스 아치 : 플랫폼 용 모듈을로드 할 수 없습니다 '64', and Version : 'v7.9.0'

Electron에서 sqlanywhere 패키지의 'require'문을 처리하는 방식이 문제를 일으키는 것으로 보입니다.

나는 위의 catch 블록을 확인하기 위해 두 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는이 시점에서 여전히 널 : sqlanywhere의하는 index.js입니다 x64 드라이버. 다시 말하지만, Electron가 관련 될 때까지 작동합니다.

사람이 어떤 통찰력 영원히 감사 할 것을 제공 할 수 있다면 전자가

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

와 가진 문제가 될 수 있습니다 보인다!

덕분에

답변

0

난 당신이 부하에 시도되는 모듈은 네이티브 모듈을 포함한다고 가정 해 봅시다. 네이티브 모듈은 컴파일 된 바이너리에 대해 node.js 프로세스 간의 버전 일치가 필요합니다. 즉, node.js 버전이 노드 설치와 Electron 사이에 일치하지 않으면 모듈을로드 할 수 없습니다. 사이의 특정 버전을 일치 시키거나 https://github.com/electron/electron-rebuild을 사용하여 올바른 바이너리를 생성 할 수 있습니다.

+0

감사합니다. 전자 재 구축을 사용하여이 문제를 해결할 수있었습니다. –