Electron 로컬 작업 로그 Sqlite 3 쓰기

3699 단어

Electron 로컬 작업 로그 Sqlite 3 쓰기


Node에서 외부 라이브러리를 어떻게 호출하는지 앞에서 말씀드렸지만, dll의load를 Electron에 놓으면 오류가 발생합니다.
Error: A dynamic link library (DLL) initialization routine failed

이것은 분명히 dll이 불러오는 데 성공하지 못한 것이다. 왜 Node에서 문제가 없는 방법을 시도해 봤는지 Electron에 문제가 생겼다. 나는 지금 마음이 두렵다. 왜냐하면 Electron은 우리의 최종javascript 실행 용기이기 때문이다. 만약에 이런 외부 라이브러리를 불러오는 방식을 사용할 수 없다면 이전의 기술 방안이 다시 시작되어야 한다는 것을 의미한다. 두근거리는 마음을 품고 내가 찾아봤다.다행히도 매우 적합한 문제와 상당히 구체적인 문제 해결 방안이 있다.
전자론과 node 때문에.js가 사용하는 V8 버전이 일치하지 않기 때문에 npm에 설치된 모듈을 직접 사용하면 electron에서 사용할 수 없습니다. 특히 c, c++로 개발한 모듈을 사용할 수 있습니다.

아래의'원생 모듈 사용'부분에서 신기한 것은 중국어의 해결 방안이다. 나는 두 번째'모듈 다운로드 및 재컴파일'해결 방안을 사용한다.
npm install --save-dev electron-rebuild
#     "npm install" ,       
./node_modules/.bin/electron-rebuild
#  windows            ,    :
.
ode_modules\.bin\electron-rebuild.cmd

이렇게 하면 Electron에 dll 라이브러리 파일이 성공적으로 로드됩니다.
다음은 로그에 집중합니다. 로그를 쓰는 데 있어서 어려운 점은 작업 순서를 간단히 정리하고 업무 요구를 먼저 말하는 것입니다.
  • 클라이언트가 발송되기 전에 소프트웨어 패키지에 암호화되지 않은 로그 파일이 포함되어 있습니다.
  • 고객 로그인 작업과 동시에 서버에 자신의 키를 요청하면 고객은 자신의 키를 받는다. 첫 번째 로그인이면 요청한 키로 자신의 데이터베이스 파일을 암호화하고 첫 번째 로그인이 아니면 자신의 데이터베이스 파일을 복호화한다.
  • 이렇게 하면 로컬 데이터베이스의 복호화가 완성된다.

  • 비즈니스 정의:
  • 로그인 여부를 판단
  • 최초 로그인 여부 판단
  • 처음 로그인한 경우 키 뒤에 데이터베이스 파일을 암호화하고 로그인 로그를 작성하도록 요청
  • 처음 로그인이 아닌 경우 키 후 데이터베이스 파일 복호화 요청 및 로그인 로그
  • 코드는 다음과 같습니다.
    postSubmit(submitUrl: string, params: string): Promise {
        const url = submitUrl;
        const logData = {
          url: url,
          payload: params
        };
        if (url !== '/login/login') {
           this.electronService.send('log', JSON.stringify(logData));
        }
        const options = new RequestOptions({withCredentials: true});
          return this.http.post(Settings.baseURL + submitUrl, params, options)
            .toPromise()
            .then((res: Response) => {
                const body = JSON.stringify(res.json());
                if (url === '/login/login') {
                    this.electronService.send('dbOpen', JSON.parse(body).md5);
                    this.electronService.send('log', JSON.stringify(logData));
                }
                if (res.json().msg === '404') {
                    this.electronService.syncSend('key', 'Need to update!');
                }
                return body || '';
            })
            .catch(this.handleError);
    }
    

    주 스레드 수신:
    ipcMain.on('dbOpen', (event, arg) => {
        lib_oper.dbOpen(arg);
    });
    ipcMain.on('log', (event, arg) => {
        arg= JSON.parse(arg);
        let statement = 'INSERT INTO logs VALUES(\'' + arg.url + '\',\'' + arg.payload + '\');';
        lib_oper.insertOper(statement);
    });
    

    라이브러리 파일 작업:
    dbOpen: key => {
        SQLite3.sqlite3_open('assets/sqlite3/logs.sqlite3', db);
        db = db.deref();
        console.log(key);
        SQLite3.sqlite3_rekey(db, key, key.length);
    }
    insertOper: statement => {
        console.log(statement);
        SQLite3.sqlite3_exec(db, statement, null, null, null);
    }
    

    2017년 10월 23일 12:16:29 증가:

    electron-rebuild 장착만으로는 부족합니다. 여기에 따라 실행해야 합니다.
     # Every time you run "npm install", run this
     ./node_modules/.bin/electron-rebuild
     # On Windows if you have trouble, try:
     .
    ode_modules\.bin\electron-rebuild.cmd

    관련 참조:

  • Electron에서 ffi 모듈을 통해 자바스크립트 호출 C++ 동적 라이브러리
  • ELECTRON 신규 모듈 접근 방법
  • 기본 모듈 사용
  • Using Native Node Modules
  • 좋은 웹페이지 즐겨찾기