[解決済み] 既存のExpressアプリケーションでElectronを使用する方法
質問
のようなサンプルを読み、試してみました。 https://github.com/frankhale/electron-with-express しかし、ExpressアプリをElectronに変換する方法がよくわからない。
既存のExpressアプリケーションでElectronを使用するにはどうすればよいですか?
例えば、このような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>
結果.ejs
Results page
<ul>
<% data["data"]["movies"].forEach(function(movie){ %>
<li>
<strong><%= movie["title"]%></strong> - <%= movie["year"]%>
</li>
<% }) %>
</ul>
<a href="/">Search again</a>
解決方法は?
エレクトロンで
main.js
ファイルでは
require
あなたの
app.js
ファイルのインスタンスを作成して、Express アプリケーションを起動します。
BrowserWindow
を作成し、Express アプリケーションがリッスンしている URL をロードします。
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と同じディレクトリにない場合、Expressアプリケーションに
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
を作成し、その中にビューを格納します。
関連
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み] (node:63208) DeprecationWarning: collection.ensureIndex は非推奨です。代わりにcreateIndexesを使用してください [重複]。
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] Npmエラー - Windows NT - 解決方法
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】Node.jsのホスト名/IPが証明書のaltnamesと一致しない。
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] http-server コマンドが見つかりません。
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。