線上配置修改工具koa pm2 ejs ace-editor

背景

系統(tǒng)代碼中存在有配置文件哩簿,針對于不同的客戶,配置文件是不同的惧财。針對這種情況览祖,如果進行登錄服務器再操作是麻煩的孝鹊,因此希望開發(fā)出相應的工具,可以線上直接進行編輯保存的展蒂。

環(huán)境搭建

koa依賴安裝

這里使用pnpm相對于npm它有更多的優(yōu)勢又活。

pnpm add koa koa-router 

koa-router的基本使用

// router/index.js
const Router = require('koa-router')
const home = require('./home.js')
let router = new Router()
router.use('/', home.routes(), home.allowedMethods())
module.exports = router


// router/home.js
const Router = require('koa-router')
const router = new Router()
home.get('/',async ctx=>{
 ctx.body = 'hello world'
})

// app.js
const app = require('Koa')()
const router = require('./src/router/index')
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000,()=>{
console.log('app is starting at port 3000苔咪!')
})

<meta charset="utf-8">

hello.png

程序熱更新

在開發(fā)代碼時,如果進行了代碼的修改柳骄,需要關(guān)閉并重新啟動服務团赏,才能看到效果,這個是很麻煩的耐薯。而在node中可以使用nodemon來進行文件的監(jiān)聽舔清,并自動觸發(fā)重啟。

pnpm add nodemon -D
// package.json
{
  "scripts": {
    "serve": "nodemon main.js"
  },
}

vscode中的斷點調(diào)試

// .vscode/setting.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "command": "npm run serve",
      "name": "Run npm run serve",
      "request": "launch",
      "type": "node-terminal"
    }
    
  ]
}
debugger.png

至此曲初,基本的環(huán)境配置已經(jīng)完成体谒。

頁面開發(fā)

這里使用koa推薦的模板引擎ejs,來進行服務端頁面的開發(fā)臼婆。

如何在模板中寫js抒痒?

直接寫在script

<h1>hello world</h1>
<script type="text/javascript">
  console.log("hello world");
</script>

如何引入一個頁面?

使用include語法

<%- include('./utils.ejs') %> 

如何引用第三方插件ace editor?

因為在ejs中,并不像在工程化的項目中的颁褂,直接安裝依賴并引入故响,便是可以直接使用的。而是需要通過script的方式引入痢虹,那首先便是需要找到插件的文件位置被去。

  1. 安裝依賴
pnpm add ace-builds
  1. 打開依賴,找到package.json奖唯,并查看main的位置


    ace.png

    3.將整個文件夾拷貝出

靜態(tài)資源路徑設(shè)置

// 安裝
pnpm add koa-static 
// app.js中使用 設(shè)置 static為靜態(tài)目錄
const staticFiles = require('koa-static')
app.use(staticFiles(join(__dirname, './static/')))

需要注意的是訪問時:

  1. 不要添加 static 不然報404
  2. 需要直接訪問到文件才有效


    ace-view.png

編輯器相關(guān)設(shè)置

主題設(shè)置

  1. 通過script引入主題:
<script src="/lib/ace/mode-javascript.js"></script>
  1. 找到主題名


    theme.png
  2. 設(shè)置主題
 editor.setTheme("ace/theme/twilight");

模式設(shè)置

 editor.session.setMode("ace/mode/javascript");
mode.png

代碼格式化

// 引入文件 
<script src="/lib/ace/ext-beautify.js"></script>

// 導出定義 
 var beautify = ace.require("ace/ext/beautify");
 // 使用
  beautify.beautify(editor.session);

// 事件監(jiān)聽
editor.commands.addCommand({
  name:"save",
  bindKey:{win:"Ctrl-S",mac:"Command-S"},
  exec(){
      // 格式化  保存
  }
})

接口開發(fā)

基本代碼

const path = ...
home.post('getFile', async (ctx) => {
  const back = fs.readFileSync(path, 'utf-8')
  ctx.body = createRespose({
    data: back
  })
})

home.post('saveFile', async (ctx) => {
  console.log(ctx.request.body.data)
  fs.outputFile(path, ctx.request.body.data, (res) => {
    console.log(res)
    ctx.body = createRespose({
      data: "保存成功"
    })
  })
})   // 這種寫法不行的

ctx.body 是必須要放出來的惨缆,因為回調(diào)是異步的 此時整個外部的已經(jīng)走完成了的 返回的時機錯過了的。

接口調(diào)試

這里推薦使用一款chrome插件postwomen丰捷。

postwomen1.png

`
postwomen2.png

線上部署

linux環(huán)境下node安裝坯墨,與軟鏈接設(shè)置

// 下載  可以先從本地下載再上傳的 公司測試服很慢
wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz 
// 解壓
tar xf node-v14.16.1-linux-x64.tar.xz
// 設(shè)置軟鏈接
ln -s /home/soft/node-v14.16.1-linux-x64/bin/node /bin/node
ln -s /home/soft/node-v14.16.1-linux-x64/bin/npm  /bin/npm 
ln -s /home/soft/node-v14.16.1-linux-x64/bin/pm2 /bin/pm2
ln -s /home/soft/node-v14.16.1-linux-x64/bin/pnpm  /bin/pnpm 

node使用pm2進程管理

pm2 start app.js # 啟動app.js應用程序
pm2 start app.js -4  # cluster mode 模式啟動會啟動4個app.js 4個應用程序會自動負載均衡
pm2 start app.js --watch # 當文件變化時會自動重新啟動應用

pm2 logs # 顯示出所有應用程序的日志
pm2 logs [app-name] # 顯示出指定應用程序的日志

pm2 stop all # 停止所有的應用程序

pm2 delete 0 # 刪除指定應用 id 0

也可以通過 pm2 --help查看。

pm2.png

意外情況的處理

我使用pm2 start app.js --watch -i 2啟動應用后病往,利用pm2 stop app.js,發(fā)現(xiàn)服務并沒有關(guān)閉捣染,還是可以正常訪問到的,再次利用pm2 stop all,甚至是使用pm2 kill all停巷,依舊沒有解決問題耍攘。
通過lsof -i:port來查看端口占用情況,然后找到pid利用kill port結(jié)束畔勤,通過這樣的方式蕾各,才將應用最終關(guān)閉。

image.png

但是之后庆揪,再次啟動式曲,并利用 pm2 stop all還有pm2 delete all這種方式來關(guān)閉,是可以成功關(guān)閉的。

最后

通過這樣的一個小的工具吝羞,盡管還是很簡單兰伤,但是可以做到不用分發(fā)服務器端密碼,而開發(fā)人員可以修改配置的目的钧排。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敦腔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子卖氨,更是在濱河造成了極大的恐慌会烙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筒捺,死亡現(xiàn)場離奇詭異柏腻,居然都是意外死亡,警方通過查閱死者的電腦和手機系吭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門五嫂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肯尺,你說我怎么就攤上這事沃缘。” “怎么了则吟?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵槐臀,是天一觀的道長。 經(jīng)常有香客問我氓仲,道長水慨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任敬扛,我火速辦了婚禮晰洒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啥箭。我一直安慰自己谍珊,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布急侥。 她就那樣靜靜地躺著砌滞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坏怪。 梳的紋絲不亂的頭發(fā)上贝润,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音陕悬,去河邊找鬼题暖。 笑死按傅,一個胖子當著我的面吹牛捉超,可吹牛的內(nèi)容都是我干的胧卤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拼岳,長吁一口氣:“原來是場噩夢啊……” “哼枝誊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惜纸,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叶撒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耐版,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祠够,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年粪牲,在試婚紗的時候發(fā)現(xiàn)自己被綠了古瓤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腺阳,死狀恐怖落君,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亭引,我是刑警寧澤绎速,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站焙蚓,受9級特大地震影響纹冤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜主届,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一赵哲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧君丁,春花似錦枫夺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至印蔗,卻和暖如春扒最,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背华嘹。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工吧趣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓强挫,卻偏偏與公主長得像岔霸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俯渤,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容