1. 程式人生 > >結合 Shell 對 Koa 應用運行環境檢查

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

resolv 應用服務 onf enc shell 腳本 exce 需要 執行 depend

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

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

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

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

一、mongodb 啟動腳本

我們在應用目錄下新建腳本文件

/post-process/sh/mongodb.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)

// ...

來源:https://segmentfault.com/a/1190000017135577

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