Electron "AppData" dosyaya yaz. Nerede "elektronun" dan ithalat {app} eklemek için ;?

oy
0

Benim ilk Elektron uygulamasını yapıyorum. Ben appData klasörüne bir metin dosyası (: \ Kullanıcılar \ kullanıcı \ AppData \ Roaming örnek C) kurtarmaya çalışıyorum. Ben eklemem gerekiyor biliyorum elektronun dan ithalat {app}; Bazı ama onu nereye yerleştirileceğini emin değilim nerede.

Benim index.js ben veritabanı ayarlarını yazıyorum JavaScript O bir metin dosyasına yaptığı şeklinde kullanıcı arz eder. Ben appData dizin adresi olması gerekir yerdir.

// Write data to text file
var filepath = app.getPath(appData) 
var filename = database_quick_image_forensics.txt
var inp_data = inp_host + | + inp_username + | + inp_password + | + inp_database_name + | + inp_table_prefix;
write_to_file(filepath, filename, inp_data);

Benim tüm kod aşağıda:

./setup/index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset=UTF-8>
    <title>Setup</title>
    <!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->

        <!-- CSS -->
            <link rel=stylesheet type=text/css href=../_webdesign/dark/dark.css />
        <!-- // CSS -->


    <!-- jQuery -->
    <script>window.$ = window.jQuery = require('../javascripts/jquery/jquery-3.4.1.js');</script>
    <script src=../javascripts/jquery/jquery-3.4.1.js charset=utf-8></script>
    <!-- //jQuery -->

    <!-- jQuery -->
    <script src=./index.js charset=utf-8></script>
    <!-- //jQuery -->
</head>
<body>
<div id=main_single_column>
  <h1>Setup</h1>

<!-- Feedback -->
    <div id=feedback_div class=success>
        <p id=feedback_p>Success</p>
    </div>
<!-- //Feedback -->

<!-- Database connection form -->

      <p>Host:<br />
      <input type=text name=inp_host id=inp_host value=localhost />
      </p>

      <p>Port:<br />
      <input type=text name=inpport id=inp_port value= />
      </p>

      <p>Username:<br />
      <input type=text name=inp_username id=inp_username value=root />
      </p>

      <p>Password:<br />
      <input type=text name=inp_password id=inp_password />
      </p>

      <p>Database name:<br />
      <input type=text name=inp_database_name id=inp_database_name value=quick />
      </p>

      <p>Table prefix:<br />
      <input type=text name=inp_table_prefix id=inp_table_prefix value=cf_ />
      </p>

      <p>
      <button id=form_connect_to_database_submit>Connect to database</button>
      </p>

<!-- //Database connection form -->
</div>



</body>
</html>

./setup/index.js

const fs = require('fs');

// Action = On submit
$(document).ready(function(){

    $(#form_connect_to_database_submit).click( function() {
        // Feedback
        $('#feedback_div').show();
        $('#feedback_div').removeClass(success);
        $('#feedback_div').addClass(info);
        $('#feedback_p').text(Connecting!)

        // get all the inputs
        var inp_host = $(#inp_host). val();
        var inp_username = $(#inp_username). val();
        var inp_password = $(#inp_password). val();
        var inp_database_name = $(#inp_database_name). val();
        var inp_table_prefix = $(#inp_table_prefix). val();

        // Test connection
        var connection_result = connect_to_database(inp_host, inp_username, inp_password, inp_database_name, inp_table_prefix);
        if(connection_result != connection_ok){
            // Connection Failed
            $('#feedback_div').removeClass(info);
            $('#feedback_div').addClass(error);
            $('#feedback_p').text(connection_result)
        }
        else{
            // Connection OK
            $('#feedback_div').removeClass(info);
            $('#feedback_div').addClass(success);
            $('#feedback_p').text(Connected)

            // Write data to text file
            var filepath = app.getPath(appData) 
            var filename = database_quick_image_forensics.txt
            var inp_data = inp_host + | + inp_username + | + inp_password + | + inp_database_name + | + inp_table_prefix;
            $('#feedback_p').text(Connected  + filepath)
            write_to_file(filepath, filename, inp_data);

            // Feedback
            $('#feedback_div').removeClass(info);
            $('#feedback_div').addClass(success);
            $('#feedback_p').text(Connected to)
        }




    });
    $('#inp_host').focus();
});


// Function connect to database
function connect_to_database(inp_host, inp_username, inp_password, inp_database_name, inp_table_prefix){
    var mysql = require('mysql');

    // Add the credentials to access your database
    var connection = mysql.createConnection({
        host     : inp_host,
        user     : inp_username,
        password : null, // or the original password : 'apaswword'
        database : inp_database_name
    });

    // connect to mysql
    connection.connect(function(err) {
        // in case of error
        if(err){
            console.log(err.code);
            console.log(err.fatal);
            return err.code;
        }
    });


    // Perform a query
    $query = 'SELECT * FROM `cf_admin_liquidbase` LIMIT 10';
    connection.query($query, function(err, rows, fields) {
        if(err){
            console.log(An error ocurred performing the query.);
            console.log(err);
            return;
        }
        console.log(Query succesfully executed, rows);
    });

    return connection_ok;
} // connect_to_database




// Function write setup
function write_to_file(filepath, filename, inp_data){


    var fullpath = filepath + \\ + filename;
    fs.writeFile(fullpath, inp_data, (err) => {
        // throws an error, you could also catch it here
        if (err) throw err;
        // success case, the file was saved
        console.log('Lyric saved!');
    });
} // write_to_file

./main.js

const { app, BrowserWindow } = require('electron')


// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win


function createWindow () {
  // Create the browser window.
  win = new BrowserWindow({
          width: 800,
          height: 600,
          webPreferences: {
          nodeIntegration: true
          }
  })

  // and load the index.html of the app.
  win.loadFile('index.html')

  // Open the DevTools.
  // win.webContents.openDevTools()

  // Emitted when the window is closed.
  win.on('closed', () => {
          // Dereference the window object, usually you would store windows
          // in an array if your app supports multi windows, this is the time
          // when you should delete the corresponding element.
          win = null
  })
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', () => {
  // On macOS it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
          app.quit()
  }
})

app.on('activate', () => {
  // On macOS it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (win === null) {
          createWindow()
  }
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.
Oluştur 13/01/2020 saat 21:58
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
2

Ben "elektronun" dan ithalat {app} eklemem gerekiyor biliyorum; Bazı ama onu nereye yerleştirileceğini emin değilim nerede.

Uygulamanın modülü ithal (benim durumumda) daima mainUygulamaların yaşam döngüsünü kontrol edebilirsiniz böylece sürecin. Eğer bazı kullanmak istiyorsanız Ancak, appsizin modül işlevsellik renderersüreci, sen aracılığıyla orada alabilirsiniz remote(Bu sorunun kabul cevap gösterildiği gibi: modülü ? Veri depolamak için elektronun app.getPath () nasıl kullanılır )

const remote = require('electron').remote;
const app = remote.app;
console.log(app.getPath('userData'));

mainVe renderersüreçler anahtar kavramlardır ElectronO üzerinde okuma öneririm böylece. Özü tek olması mainsüreci - hiçbir görsel temsilini vardır ve oluşturma ve tahrip, uygulamanızın yaşam döngüsü ile ilgilenmektedir renderer(gibi süreçleri BrowserWindows oluşturucu işlemleri, vb arasında), iletişimi - ve birçok olarak olabilir renderergibi işlemler ihtiyacınız.

Sen ve yazma dosyaları okumak istiyorum Yani eğer bunu yapabilir rendereryukarıda gösterildiği gibi sürecin - ya sen yapabilirsin mainsüreç. İkinci durumda, eğer bir renderersüreç o mesajı olabilir, bir dosyayı kaydetmek istiyor mainsüreçtir IPC verileri gönderme, kaydedilecek.

Ne tarafa bir mimari seçimdir yapmak.

Cevap 14/01/2020 saat 00:08
kaynak kullanıcı

oy
1

Senin üzerindeki uygulamaya yolunu almak için ana süreç . Sonra main.js bu kodu kullanın

switch(process.platform) {
    case 'darwin': {
      return path.join(process.env.HOME, 'Library', 'Application Support', ...);
    }
    case 'win32': {
      return path.join(process.env.APPDATA, ...);
    }
    case 'linux': {
      return path.join(process.env.HOME, ...);
    }
}

Ve aralarından yolunu alacaksın Oluşturucu sonra bu kodu kullanın oluşturucunuz

const remote = require('electron').remote;
const app = remote.app;
console.log(app.getPath('userData'));

Kullanımınız oluşturucunuz de gerektiren Ama emin olun nodeintegration doğrudur.

Yerinde olsam, ben de uygulama yolunu almak için gittiğini ana süreç ve en dosyayı depolamak anacı de. Dolayısıyla, birçok bağımlılıkları ithal oluşturucu işleminde iyi bir seçim değildir. Oluşturucu işlemine esas Krom tarayıcısında uygulamanın işleyişini gösteren ilgilenir.

Yani bu işlemi yapmak için ana süreç . Bunu kullan

senin main.js de

  const { ipcMain } = require('electron')
  const appPath = () => {
    switch(process.platform) {
      case 'darwin': {
        return path.join(process.env.HOME, 'Library', 'Application Support');
      }
      case 'win32': {
        return process.env.APPDATA;
      }
      case 'linux': {
        return process.env.HOME;
      }
    }
  }

  const writeToFile = (fileName, inData) => {
      const fullPath = path.join(appPath(), "\\", fileName);
      fs.writeFile(fullPath, inData, (err) => {
        // throws an error, you could also catch it here
        if (err) throw err;
        // success case, the file was saved
        console.log('Lyric saved!');
    });
  } // write_to_file

  ipcMain.on('WRITE_TEXT', async (event, arg) => {
    writeToFile(arg.fileName, arg.inData)
  });

senin oluşturucu işleminde azından bu kodu ekleyin.

const {ipcRenderer} = require('electron')
ipcRenderer.sendSync('WRITE_TEXT',{fileName, inData})

Gördüğünüz gibi en oluşturucu işleminde , bu gönderiyor inp_datasizin için ana süreç 'WRITE_TEXT' aracılığıyla IPC kanalı .

Kodunuza burada bir şey daha. Eğer oluşturucunuz adresinden DB bağlanıyorsanız ve bu mümkün ama bu doğru bir seçim değildir. Birkaç oluşturucusunu yerken düşünün. Çok anacı bu hareket etmelidir.

Cevap 14/01/2020 saat 03:32
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more