代码之家  ›  专栏  ›  技术社区  ›  fedeteka

如何在现有的Express应用程序中使用电子

  •  2
  • fedeteka  · 技术社区  · 6 年前

    我读过并试过类似的样品 https://github.com/frankhale/electron-with-express 但我还是不明白如何将一个快速应用程序转换成电子

    如何在现有的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 for a movie
    
    <form action="results" method="GET">
        <input type="text" placeholder="search term" name="search">
        <input type="submit">
    </form>
    

    结果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 回复  |  直到 6 年前
        1
  •  2
  •   Tiny Giant    6 年前

    电子中 main.js 文件,你应该 require 你的 app.js 文件以启动Express应用程序,然后创建 BrowserWindow 并加载Express应用程序正在侦听的URL。

    请注意,您要么将IP和端口硬编码为电子,要么将它们从Express导出并导入电子。 MIN JS 脚本。

    /MI. 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)
    

    /包装袋

    {
      "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 目录与位于同一目录中 MIN JS package.json .

    最后,您可以使用以下方法启动Express/Electron应用程序:

    > npm start
    

    如果您的Express应用程序与Electron不在同一目录中,则必须设置 views 特快专递目录:

    应用程序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 包含您的视图。