-
-
Save derekchiang/a38b72878d79d1fe4e19eb032ff2b505 to your computer and use it in GitHub Desktop.
[electron]Use electron as a Web Server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html><head><script src="app.js"></script></head><body></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// utility | |
var console = { | |
log: function () { | |
var ipc = require('electron').ipcRenderer | |
var args = ["console"].concat([].slice.call(arguments)); | |
return ipc.sendSync.apply(ipc, args)[0]; | |
} | |
}; | |
var quit = function () { | |
var ipc = require('electron').ipcRenderer | |
return ipc.sendSync("app", "quit")[0]; | |
}; | |
// server handler | |
window.addEventListener("load", function () { | |
var ipc = require('electron').ipcRenderer | |
ipc.on("request", function (event, req, port) { | |
var doc = document.implementation.createHTMLDocument(req.url); | |
var h1 = doc.createElement("h1"); | |
h1.textContent = "Hello DOM: " + req.url; | |
doc.body.appendChild(h1); | |
ipc.send(port, 200, {"content-type": "text/html;charset=UTF-8"}, | |
doc.documentElement.outerHTML); | |
}); | |
}, false); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const {app, BrowserWindow} = require('electron') | |
// electron main | |
console.log(process.versions); | |
app.on("ready", function () { | |
var ipc = require('electron').ipcMain | |
ipc.on("console", function (ev) { | |
var args = [].slice.call(arguments, 1); | |
var r = console.log.apply(console, args); | |
ev.returnValue = [r]; | |
}); | |
ipc.on("app", function (ev, msg) { | |
var args = [].slice.call(arguments, 2); | |
ev.returnValue = [app[msg].apply(app, args)]; | |
}); | |
var window = new BrowserWindow({show: false}); | |
window.loadURL("file://" + __dirname + "/app.html"); | |
window.webContents.once("did-finish-load", function () { | |
var http = require("http"); | |
var crypto = require("crypto"); | |
var server = http.createServer(function (req, res) { | |
var port = crypto.randomBytes(16).toString("hex"); | |
ipc.once(port, function (ev, status, head, body) { | |
res.writeHead(status, head); | |
res.end(body); | |
}); | |
window.webContents.send("request", req, port); | |
}); | |
server.listen(8000); | |
console.log("http://localhost:8000/"); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@draeder you are very welcome. Thanks for letting us know that it works for you!