2016-10-28 21 views
6

Niedawno zacząłem robić sobie mokro z Electronem. Bardzo podoba mi się to, co kryje się za tym, ale niektóre rzeczy są dla mnie trochę mylące.Electron - Processing Input

Na przykład, jak przetwarzać dane wprowadzane przez użytkownika? Mam plik main.js i BrowserWindow wskazujący lokalny plik html (zawierający niektóre ustawienia użytkownika z polem wprowadzania).

Jak uzyskać dostęp do tych danych po przesłaniu formularza HTML (do tego samego lub innego pliku)?

main.js

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

function createWindow() { 
    win = new BrowserWindow({width: 800, height: 600}) 
    win.loadURL('file://' + __dirname + '/index.html') 

    // Emitted when the window is closed. 
    win.on('closed',() => { 
    win = null 
    }) 

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

app.on('window-all-closed',() => { 
    if (process.platform !== 'darwin') { 
    app.quit() 
    } 
}) 

app.on('activate',() => { 
    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. 

//Start the main window 
app.on('ready', createWindow) 

index.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
    <form action="" method="post"> 
     <input type="text" name="test-1"> 
    </form> 
</body> 
</html> 

Odpowiedz

4

Z Electron, node.js nie działa jako serwer WWW z trasy jak byłoby to w typowym scenariuszu aplikacji internetowych. Zamiast wysyłać żądania do tras, tworzyłbyś pojedynczą aplikację strony korzystającą z ram javascript takich jak Angular, React, Knockout itd. W tym momencie nie musisz już zajmować się routingiem. Użytkownik powinien powiązać zdarzenie kliknięcia "Prześlij" z funkcją javascript bezpośrednio na stronie i przetworzyć dane wejściowe z tego miejsca.

Możesz zrobić wszystko z kontekstu javascript strony, który możesz wykonać z głównego kontekstu procesu node.js. Na przykład, jeśli potrzebujesz dostępu do systemu plików ze swojej strony, skorzystaj z modułu Remote, aby uzyskać dostęp do natywnych interfejsów API node.js.

Na przykład:

// Gain access to the node.js file system api 
function useNodeApi() { 
    const remote = require('electron').remote; 
    const fs = remote.require('fs'); 
    fs.writeFile('test.txt', 'Hello, I was written by the renderer process!'); 
} 

ja rzadko natknąć się sytuacji, gdzie potrzebna przekazać kontrolę z powrotem do głównego procesu, aby coś osiągnąć. Po uruchomieniu BrowserWindow, wszystko, co możesz zrobić, może być zrobione z procesu renderowania. To w zasadzie eliminuje potrzebę robienia postów w formularzach za pośrednictwem http.