初めての質問になります。
javascriptは基本的なwebでしか触ったことがなく、こういったシステム的なものは初心者です。
調べながら見よう見まねでやってみたのですが、うまくいかないので質問させていただきました。
質問内容など、不足事項や間違い、追加情報が必要でしたらコメントをいただけますとすぐ追記・修正いたします。
どうぞよろしくお願いいたします。
Electronのmain.js(エントリーポイント)ファイルが膨大になったので、分割をしたいがその際に変数を共有したい
Electronで開発を行っている際に、ファイルの中身が膨大になった。
その際に、ファイルを分割しようと考えたが分割した先々で使いたい変数があり、これをそれぞれ分割先で共有させたい。
色々調べて見よう見まねで試してみたのですが、うまくいかず質問させていただきました。
作成しているもの
3個の画面をelectronで作成して、それぞれの画面で表示する内容をPOST
で投稿
GET
で表示している値を取得というものを作っていました。
以下参考
・画面A(windowA) => カテゴリーA
・画面B(windowB) => カテゴリーB
・画面C(windowC) => カテゴリーC
のような位置付けとなっていて
POST
(localhost:80/windowA)とパラメータ{ title: "hoge", name: "taro"}を送信main.js
の中にあるexpress
のexpress.post(/windowA, function().....)
が実行される- 色々処理され、2の関数内で出力命令を画面に送る =>
windowA.webContents.send
を実行してレンダラー側に命令を送信 - 受け取ったレンダラー側は情報を元に出力する
発生している問題・エラーメッセージ
現状、electron
のエントリーポイントである、main.js
だけで全ての処理をまとめているが、下記のような構成にしたい。
- main.js (electronのメインファイル) - express.js (expressの処理をまとめたい) - preload.js (プリロードこれは現在既にある)
その際に、electron
のウィンドウの情報が入っている変数がexpress.js
側になくうまくいかない。
やりたいこと
- Node.jsのモジュール、
express
でAPIを受信して(外部からGETやPOSTされる) - GET、POSTの内容を受け取り処理を行いメインプロセスからレンダラープロセスに
ipc通信
でその情報を送りたい
その際に、現状はmain.js
の中にwindowA
の変数もあるのでipc通信
ができているが、
ファイル分割をしたときに、呼び出し元にあるwindowA
をどうしたら良いかがわからない
該当のソースコード
main.jsの中身(現状)
javascript
1// main 2import { app, ipcMain } from 'electron' 3let windowA = new BrowserWindow({ 4 webPreferences: false, 5 contextIsolation: true, 6 preload: './preload.js' 7}) 8 9//express 10const express = require('express'); 11const ex = express(); 12 13// 参考サイトのコピー 14const bodyParser = require('body-parser'); 15ex.use(function (req, res, next) { 16res.header('Access-Control-Allow-Origin', '*'); 17res.header( 18'Access-Control-Allow-Headers', 19'Origin, X-Requested-With, Content-Type, Accept' 20); 21next(); 22}); 23ex.use(bodyParser.urlencoded({ extended: true })); 24ex.use(bodyParser.json()); 25ex.listen(80); 26 27ex.post('/', function() { 28 windowA.webContents.send('update', { title: "hoge", name: "taro"}) 29})
このソースを次のような感じに分割してファイルをすっきりしたい
express.js => 外部からのGET,POSTを受け付けて処理をしてレンダラープロセスにipc通信
をしたい
javascript
1//express 2const express = require('express'); 3const ex = express(); 4 5// 参考サイトのコピー 6const bodyParser = require('body-parser'); 7ex.use(function (req, res, next) { 8res.header('Access-Control-Allow-Origin', '*'); 9res.header( 10'Access-Control-Allow-Headers', 11'Origin, X-Requested-With, Content-Type, Accept' 12); 13next(); 14}); 15ex.use(bodyParser.urlencoded({ extended: true })); 16ex.use(bodyParser.json()); 17ex.listen(80); 18 19ex.post('/', function() { 20 windowA.webContents.send('update', { title: "hoge", name: "taro"}) 21})
main.js => windowの作成などコアな部分に分けたい
javascript
1//main 2import { app, ipcMain } from 'electron' 3let windowA = new BrowserWindow({ 4 webPreferences: false, 5 contextIsolation: true, 6 preload: './preload.js' 7})
と分けたいが、windowA
がmain.js
のなかにあるため、express.js
ではipc通信
が実行できませんでした。
お聞きしたい内容が、
1これは実現できないのか
2実現する方法があるのか、そもそもが間違っているのか、できるのか
3可能であれば何をするべきなのか
です。
何卒よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/20 01:08
2021/04/20 01:11
2021/04/20 02:45 編集
2021/04/20 02:48
2021/04/20 03:06