iT邦幫忙

0

node.js + mongodb 一起執行

Zaku 2019-05-06 16:06:341031 瀏覽

請問有什麼方法可以同時執行node.js + mongodb 在win平台下,但好像只能分成兩個視窗各自跑。還是有辦法寫成shell,讓他去執行兩個跑背景,但有辦法偵測shell關閉時,就同時關閉node.js和mongodb?可以的話不要powershell,有些舊電腦不支援。

我搞不太清楚你的邏輯。
node.js不就是要處理背景用的東西?

我感覺你的問題因該不是這個吧。
或許你可以研究一下ajax好了。
因為實在不懂你碰上的問題,沒辦法可以給很好的建議
dragonH iT邦大師 1 級 ‧ 2019-05-06 17:05:07 檢舉
他的意思應該是只用一個shell 就把 database 跟 node.js server 開起來

不過實務上應該沒人這麼做吧

你乾脆說說是什麼特殊情況讓你想要這麼做可能比較好給建議
Zaku iT邦新手 4 級 ‧ 2019-05-06 17:18:13 檢舉
dragonH 恩是的,但實務上應該是沒人這樣做。因為要裝很多台電腦,方便其他人安裝跟使用,但電腦很多台狀況很多,希望盡量簡化步驟。像是要裝node 要裝 mongo,還要開兩個shell,還要依次續開,當掉還要兩個都關掉...太瑣碎
0
harutsuki
iT邦新手 5 級 ‧ 2019-05-06 19:40:43

我建議是在linux下跑背景,service是不會跳出視窗的,要用到的時候再開terminal去執行指令

此外我沒記錯的話,mongodb在win下不是會背景執行,不會跳視窗?

會跳視窗的只有nodejs吧

dragonH iT邦大師 1 級 ‧ 2019-05-06 20:16:17 檢舉

可以用shell開 也可以service執行

Zaku iT邦新手 4 級 ‧ 2019-05-06 20:22:48 檢舉

問題不是我要操作,我要操作就全背景或linux皆可。目前是因會給一般人操作,且會裝在N台上

Zaku iT邦新手 4 級 ‧ 2019-05-06 20:23:31 檢舉

兩者都可以背景也可以視窗,在win底下

0
dragonH
iT邦大師 1 級 ‧ 2019-05-06 20:46:11

真的要的話可以試試這種土炮的方法

不過我在查相關資料的時候

幾乎每個都說 'you shouldn't do this' XD

const { exec } = require('child_process');
const command = 'mongod --dbpath D:\\datatbase';

async function main() {
  const openMongoDB = exec(command, (e, stdout, std) => {
    if (e) {
      console.log(e)
    }
  });
  await sleep(10000);
  console.log('has wait for database completed for 10s');
  //因為沒辦法拿到mongodb開啟成功的callback 所以只好等個10秒之類的
  // next to do
};

function sleep(time) { // Sleep for ${time} ms 
  return new Promise((resolve) => {setTimeout(() => {resolve()}, time)});
};

main();

大概的方向應該就這樣

Zaku iT邦新手 4 級 ‧ 2019-05-07 09:36:08 檢舉

滿爛XD

0
ccutmis
iT邦高手 9 級 ‧ 2019-05-07 15:05:38

我有個想法...
就是用pyautogui控制鍵盤代替手動輸入,範例如下:

auto-bot-call-2cmd.py

import pyautogui as pau

#第一個cmd視窗
pau.hotkey('winleft','r')
pau.typewrite('cmd')
pau.press('enter')
pau.typewrite('ping 168.95.1.1 -t')
pau.press('enter')

#第二個cmd視窗
pau.hotkey('winleft','r')
pau.typewrite('cmd')
pau.press('enter')
pau.typewrite('ping 168.95.192.1 -t')
pau.press('enter')

執行:
python auto-bot-call-2cmd.py
就會看到電腦自己動起來開了兩個cmd並輸入一些東西在跑
pau.typewrite('ping 168.95.1.1 -t')
裡面換成你要啟動node跟mongodb的字串

最後確定功能沒問題再用pyinstaller把它打包成 exe檔就可以在多台電腦做同樣的事了
cmd跟[win]-[r]是舊windows就有的東西,跑起來應該不會有問題。

註:
pyautogui安裝時如果你的python版本太新的話可能需要到
https://pypi.org/project/PyAutoGUI/0.9.30/#files
手動下載安裝

pyautogui還有蠻多不錯的功能 樓主可以到這邊研究:
https://pyautogui.readthedocs.io/en/latest/index.html

https://ithelp.ithome.com.tw/upload/images/20190507/20028574HF99YMEp6z.png

Zaku iT邦新手 4 級 ‧ 2019-05-07 16:31:09 檢舉

大大我不會寫python orz...,簡單來說我用py去寫,轉出exe,之後跑個exe就可以了嗎,還是說都是跑.py,這樣還要安裝python。上方大大的方法其實差異是在因為取不到真正的執行mongodb完成的callback,用py寫應該也會有同樣的問題?

ccutmis iT邦高手 9 級 ‧ 2019-05-07 17:23:58 檢舉

你先上網搜一下"Anaconda3 教學"照做先安裝好Anaconda3就等於有Python的環境了,以這個demo來說需要另外安裝pyinstaller跟pyautogui兩個套件,
pyautogui在上面的本文有連結,不知怎麼安裝再詢問,
pyinstaller安裝很簡單
https://medium.com/pyladies-taiwan/python-%E5%B0%87python%E6%89%93%E5%8C%85%E6%88%90exe%E6%AA%94-32a4bacbe351
安裝好之後在c槽底下新增一個資料夾命名為"testGui",
然後新增一個文字檔命名為"my-first-app.py"
貼入上面本文裡面的程式碼並存檔。
要測試有沒有成功就點"開始->程式集"裡面的"Anaconda3 prompt",在命令列輸入
cd C:\testGui [enter]
python my-first-app.py [enter]
到這邊如果一切順利的話就會跳出兩個cmd視窗在ping 192.168....
如果這裡有報錯,再看是什麼出錯去修正到不會報錯正常執行為止。

到能正常執行就剩下把my-first-app.py轉exe的動作,這非常簡單就一行:
pyinstaller -F .\my-first-app.py
等它跑完如果一切順利就會在dist資料夾裡面看到my-first-app.exe
如果沒辦法順利轉exe可能要再看什麼出錯並作修正,
像我剛才轉exe出現
"Exception: Cannot find PyQt5 plugin directories when using Pyinstaller despite PyQt5 not even being used"
參考下列文章
https://stackoverflow.com/questions/39736000/exception-cannot-find-pyqt5-plugin-directories-when-using-pyinstaller-despite-p
pip uninstall pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
然後再重新執行
pyinstaller -F .\my-first-app.py 就成功了。

成功之後你就可以把exe拷貝到別台電腦測試看看,加油~

0
froce
iT邦大師 3 級 ‧ 2019-05-08 13:03:02

我比較好奇的是,真的有每台電腦都要裝mongodb的必要性?
去找些像是sqlite、lowdb之類的single file db來開發會不會省很多事?

Zaku iT邦新手 4 級 ‧ 2019-05-08 17:51:35 檢舉

想過了,寫法不同,有沒想過哪天有需求時,重寫道你吐血吧orz

froce iT邦大師 3 級 ‧ 2019-05-08 18:18:13 檢舉

那你就乖乖的裝到吐血啊,哪天mongodb爆個遠端嚴重漏洞,公司要你補,你還得更新的要死。XD

為啥會問這問題就是我是不太相信這種每台都要裝的應用程式,會得用到正式的線上資料庫。
然後我還特地回答了一個本地的NoSQL,來讓你好轉換...= =a

Zaku iT邦新手 4 級 ‧ 2019-05-08 18:50:19 檢舉

沒喔我之前寫的另一個是裝資料庫,產的資料量很大

我要發表回答

立即登入回答