Как использовать Electron с существующим приложением Express - PullRequest
0 голосов
/ 17 ноября 2018

Я прочитал и попробовал образцы, подобные тому, что был на https://github.com/frankhale/electron-with-express, но все еще не понимаю, как преобразовать приложение Express в Electron

Как я могу использовать Electron с существующим приложением Express?

Возьмем, к примеру, это приложение Express:

app.js

var express = require("express");
var app = express();

var request = require("request");

app.set("view engine", "ejs");

app.get("/", function(req, res) {
    res.render("search");
});

app.get("/results", function(req, res){
    var query = req.query.search;
    var url = "https://yts.am/api/v2/list_movies.json?sort=seeds&limit=15&query_term='" + query + "'";
    request(url, function(error, response, body){
        var data = JSON.parse(body);
        if(!error && response.statusCode == 200){
            //res.send(data["data"]["movies"][0]["title"]);
            res.render("results", {data: data});
            //["movies"][0]["title"]
        }
        else
        console.log(data);
    });
});

app.listen(process.env.PORT, process.env.IP, function(){
    console.log("IMDB server has started");
});

search.ejs

Search for a movie

<form action="results" method="GET">
    <input type="text" placeholder="search term" name="search">
    <input type="submit">
</form>

results.ejs

Results page
<ul>
    <% data["data"]["movies"].forEach(function(movie){ %>
        <li>
            <strong><%= movie["title"]%></strong> - <%= movie["year"]%>
        </li>
    <% }) %>
</ul>

<a href="/">Search again</a>

1 Ответ

0 голосов
/ 17 ноября 2018

В файле Electron main.js вам нужно require ваш app.js файл, чтобы запустить приложение Express, затем создать новый экземпляр BrowserWindow и загрузить URL-адрес, который прослушивает ваше приложение Express.

Обратите внимание, что вам придется либо жестко кодировать IP и PORT в Electron, либо экспортировать их из Express и импортировать их в скрипт * Electron main.js.

./main.js

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

let mainWindow = null

function main() {
  mainWindow = new BrowserWindow()
  mainWindow.loadURL(`http://localhost:3000/`)
  mainWindow.on('close', event => {
    mainWindow = null
  })
}

app.on('ready', main)

. / package.json

{
  "name": "your-app-name",
  "version": "1.0.0",
  "description": "A description of your application",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "repository": "https://github.com/link/to/repo",
  "keywords": [ "some","keywords" ],
  "author": "You",
  "license": "Your License",
  "dependencies": {
    "ejs": "^2.6.1", // required for your specific example where `ejs` package is used
    "electron": "^3.0.9",
    "express": "^4.16.4"
  }
}

Тогда вам захочетсячтобы убедиться, что каталог node_modules находится в том же каталоге, что и main.js и package.json.

Наконец, вы можете запустить приложение Express / Electron, используя:

> npm start

Если ваше приложение Express не находится в том же каталоге, что и Electron, вам нужно будет соответственно указать каталог views для экспресс:

app.js

var path = require('path')
var request = require("request");
var express = require("express");
var app = express();

app.set('views', path.join(__dirname, '/views'));

...

Где /views - каталог относительно app.js, содержащий ваши представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...