"AppData" इलेक्ट्रॉन में में फाइल करने के लिए लिखें। कहाँ "इलेक्ट्रॉन" से आयात {एप्लिकेशन} जोड़ने के लिए ;?

वोट
0

मैं अपनी पहली इलेक्ट्रॉन आवेदन करने से कर रहा हूँ। मैं AppData फ़ोल्डर में एक पाठ फ़ाइल (: \ Users \ उपयोगकर्ता \ AppData \ रोमिंग उदाहरण सी) को बचाने के लिए कोशिश कर रहा हूँ। मुझे लगता है मैं जोड़ने की जरूरत है पता है इलेक्ट्रॉन से आयात {एप्लिकेशन}; कुछ लेकिन मैं अनिश्चित जहां यह जगह हूं जहां।

मेरी index.js में जावास्क्रिप्ट मैं डेटाबेस सेटिंग्स लिख रहा हूँ कि एक पाठ फ़ाइल के लिए अपने रूप में उपयोगकर्ता सबमिट करता है। यह जहां मैं AppData निर्देशिका पता है की जरूरत है।

// 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);

मेरे पूरे कोड के नीचे है:

./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.
13/01/2020 को 23:58
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

मुझे लगता है मैं "इलेक्ट्रॉन" से आयात {एप्लिकेशन} जोड़ने की जरूरत है पता है; कुछ लेकिन मैं अनिश्चित जहां यह जगह हूं जहां।

एप्लिकेशन मॉड्यूल हमेशा (मेरे अनुभव में) अपने में आयातित है mainप्रक्रिया ताकि आप अनुप्रयोगों जीवन चक्र नियंत्रण कर सकते हैं। हालांकि, आप में से कुछ का उपयोग करना चाहते हैं तो appअपने में मॉड्यूल कार्यक्षमता rendererप्रक्रिया, तुम वहाँ यह माध्यम से आयात कर सकते हैं remoteमॉड्यूल (के रूप में इस सवाल का जवाब स्वीकार किए जाते हैं में दिखाया गया है: ? दुकान आंकड़ों के इलेक्ट्रॉन app.getPath () का उपयोग कैसे करें )

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

mainऔर rendererप्रक्रियाओं में महत्वपूर्ण अवधारणाओं रहे हैं Electronतो मैं उन पर पढ़ने का सुझाव चाहते हैं। सार यदि आपके पास यह है कि mainप्रक्रिया - यह कोई दृश्य प्रतिनिधित्व है और यह, अपने अनुप्रयोग के जीवन चक्र के साथ शामिल है का निर्माण करने और नष्ट करने rendererकी प्रक्रिया (जैसे BrowserWindows रेंडरर प्रक्रियाओं, आदि के बीच), संचार - और आप कई के रूप में हो सकता है rendererके रूप में प्रक्रियाओं आप की जरूरत है।

आप और लिखने फ़ाइलों को पढ़ने के लिए चाहते हैं तो अगर आप में यह कर सकते हैं rendererप्रक्रिया के रूप में ऊपर दिखाए गए - या आप में कर सकते हैं mainप्रक्रिया। उत्तरार्द्ध मामले में, अगर एक rendererप्रक्रिया है, एक फ़ाइल को बचाने के लिए करना चाहता है यह संदेश जा सकता है mainके माध्यम से प्रक्रिया आईपीसी , डेटा भेजने बचाया जा।

किस तरह आप इसे एक वास्तुशिल्प विकल्प है।

14/01/2020 को 02:08
का स्रोत उपयोगकर्ता

वोट
1

अपने पर एप्लिकेशन पथ प्राप्त करने के लिए मुख्य प्रक्रिया । फिर अपने main.js में इस कोड का उपयोग

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, ...);
    }
}

और से पथ हो रहा रेंडरर फिर अपने पर इस कोड का उपयोग रेंडरर

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

लेकिन करने के लिए उपयोग अपने रेंडरर पर की आवश्यकता होती है, तो कृपया यह सुनिश्चित कर लें nodeintegration सच है।

अगर मैं तुम्हें थे, मैं कम से एप्लिकेशन पथ प्राप्त करने के लिए जा रहा था मुख्य प्रक्रिया और कम से फ़ाइल की दुकान मुख्य प्रक्रिया के रूप में अच्छी तरह से। इसलिए, पर कई निर्भरता आयात करने रेंडरर प्रक्रिया एक अच्छा विकल्प नहीं है। रेंडरर प्रक्रिया मुख्य रूप से क्रोमियम ब्राउज़र में अपने अनुप्रयोग दिखाने का ख्याल रखता है।

तो पर इस कार्रवाई को बनाने के लिए मुख्य प्रक्रिया । इसे इस्तेमाल करो

अपने main.js पर

  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)
  });

अपने रेंडरर प्रक्रिया में इस कोड जोड़ें।

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

आप देख सकते हैं, पर रेंडरर प्रक्रिया , इस भेज रहा है inp_dataअपने को मुख्य प्रक्रिया 'WRITE_TEXT' के माध्यम से भारतीय दंड संहिता चैनल

यहां एक और बात, अपने कोड में। आप अपने रेंडरर पर अपने डीबी कनेक्ट कर रहे हैं और यह संभव है, लेकिन यह एक सही विकल्प नहीं है। जब तुम कई रेंडरर कर रहे हैं में विचार करें। तुम भी मुख्य प्रक्रिया को यह बढ़ना चाहिए।

14/01/2020 को 05:32
का स्रोत उपयोगकर्ता

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