結合 Shell 對 Koa 應用執行環境檢查

will233發表於2019-02-16

在開發環境中,啟動一個koa 應用服務,通常還需要同時啟動資料庫。比如。Mongodb、mysql 等

如果一直開著資料庫服務,在不使用的話,電腦會佔一定的效能。然而如果每次手動去啟動服務,效率又不高。因此如果我們在執行npm run start啟動 koa 應用時,如果可以提前把需要的服務啟動起來,那麼就會效率高很多。

簡單來說就是把我們平時執行的命令寫成指令碼,在啟動時執行即可。

這裡以mongodb 為例說明這個過程。

一、mongodb 啟動指令碼

我們在應用目錄下新建指令碼檔案

/post-process/sh/mongodb.sh

#!/usr/bin/sh
dbPath=$HOME/Documents/database/mongo-db
#start up mongod service
# 這裡把mongodb 服務後臺執行,錯誤輸出重定向到 ./logs/mongod.log 
mongod --dbpath ${dbPath} > ./logs/mongod.log &

二、利用child-process執行shell 指令碼

結合nodejs 的 child_process 模組,寫一個執行指令碼的方法:

// post-process/index.js
const { exec } = require(`child_process`);
/**
 * 執行一個 shell 指令碼
 * @param {*} shell 
 */
const excecShell = (shell) => {
  exec(`sh ${shell}`, (err, stdout, stderr) => {
    if (err) {
      console.log(err)
      return true
    } else {
      console.log(stdout)
    }
  })
}

/**
 * 檢查依賴,其實就是執行一系列指令碼
 */
const dependencyCheck = (shellArray) => {
    if (Array.isArray(shellArray)) {
        shellArray.map(item => excecShell(item))
    } else {
        console.log(`Illeagal shell queue!`)
    }
}
module.exports = {
    excecShell: excecShell,
    dependencyCheck: dependencyCheck
}

三、把檢查過程寫到config.js 中

還可以把我的執行檢查寫道config.js 中:

// config/index.js
const fs = require(`fs`)
const path = require(`path`)
let scriptPath = path.resolve(path.join(`./post-process/sh`))
//console.log(scriptPath)

module.exports = appConfig => {
    // 省略
    ...
    config = {
        preChecksScripts: [
          `${scriptPath}/mongodb.sh`
        ],
    }
   return config
}

四、app.js 中執行檢查過程:

const Koa = require(`koa`)
const app = new Koa()
const appConfig = require(`./config`)()

// 省略...

// 環境檢查指令碼
const preCheckTool = require(`./post-process`)

// 需要檢查的指令碼陣列
const checkScripts = appConfig.preChecksScripts
preCheckTool.dependencyCheck(checkScripts)

// ...

相關文章