如何調(diào)試芹敌?首先我們需要明確的是對Parse Server進行調(diào)試,而Parse Server本質(zhì)是一個Node服務(wù)垮抗,所以最終轉(zhuǎn)化為對node服務(wù)的調(diào)試氏捞。
通過分析Parse Server的Dockerfile的ENTRYPOINT
ENTRYPOINT ["node", "./bin/parse-server"]
結(jié)合我們的Docker Compose文件的Command指令
command: /parse-server/config/config.json
其實最終的Parse Server是通過下面這樣的命令來啟動的
node ./bin/parse-server /parse-server/config/config.json
我們可以通過添加--inspect參數(shù)來為node開啟調(diào)試,同時通過Docker Compose的entrypoint參數(shù)來覆蓋Parse Server Dockfile中的ENTRYPOINT指令冒版。
因此液茎,最終,我們修改compose.yaml文件的parse-server部分如下:
parse-server:
image: parseplatform/parse-server
container_name: parse-server
volumes:
- ./parse-server/config:/parse-server/config
- ./parse-server/cloud:/parse-server/cloud
- ./logs/parse-server:/parse-server/logs
ports:
- "1337:1337"
- "9229:9229"
depends_on:
- mongo
entrypoint: node --inspect=0.0.0.0 ./bin/parse-server /parse-server/config/config.json
networks:
- internal-network
開放9229端口辞嗡,用于調(diào)試捆等。同時通過制定entrypoint參數(shù),開啟node的inspect調(diào)試续室。注意這里我們使用了=0.0.0.0栋烤,這是由于容器內(nèi)的IP的變化,我們不能使用localhost的127.0.0.1來進行調(diào)試猎贴。
下一步我們需要重新安裝容器,先停止,然后刪除她渴,最后再安裝
docker-compose stop
docker-compose rm
docker-compose up -d
然后我們調(diào)用下面的命令查看parse-server啟動的logs
docker logs parse-server
你會發(fā)現(xiàn)下面這一行
Debugger listening on ws://0.0.0.0:9229/64a7d606-f353-4d42-b40f-f12019083e4b
For help, see: https://nodejs.org/en/docs/inspector
也就是Debugger已經(jīng)開啟达址。
接下來我們通過VSCode來進行調(diào)試
如圖,點擊最左側(cè)的bug圖標跳轉(zhuǎn)到調(diào)試主頁面趁耗,然后添加配置沉唠。在彈出的下拉列表中選擇node.js,選擇添加node.js:添加到進程苛败。此時VSCode會幫你生成一個launch.json文件满葛。
編輯文件如下:
{
// 使用 IntelliSense 了解相關(guān)屬性。
// 懸停以查看現(xiàn)有屬性的描述罢屈。
// 欲了解更多信息嘀韧,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Parse Server Docker",
"type": "node",
"request": "attach",
"port": 9229,
"address": "localhost",
"localRoot": "${workspaceFolder}/parse-server/cloud",
"remoteRoot": "/parse-server/cloud",
"protocol": "inspector",
},
]
}
配置解析:
- name:取一個容易
- type:指定為node,不需要修改
- request:指定為attach模式缠捌,不需要修改
- port:指定為9229锄贷,不需要修改
- address:為本地,因此用localhost曼月,如果為遠程谊却,那么修改為遠程服務(wù)器的地址
- localRoot:本地的源碼位置母剥,由于我們只需要調(diào)試cloud的代碼架诞,因此指定cloud目錄即可
- remoteRoot:注意remoteRoot和localRoot必須指定相同的代碼,一般是localRoot映射到服務(wù)器的目錄丝格。
- protocol:指定為inspector聪姿,無需修改碴萧。
這里address,localRoot咳燕,remoteRoot必須設(shè)置正確勿决,否則可能會出現(xiàn)“斷點未綁定”之類的錯誤。
接下來我們打開本地的main.js源文件招盲,在第二行設(shè)置一個斷點低缩。然后點擊綠三角開始調(diào)試,此時會出現(xiàn)一個調(diào)試條
在命令行執(zhí)行
curl -X POST \
-H "X-Parse-Application-Id: APPLICATION_ID" \
-H "Content-Type: application/json" \
http://localhost:1337/parse/functions/HelloCloud
該執(zhí)行并不會輸出結(jié)果曹货,VSCode會顯示程序在斷點處暫停咆繁,此時你可以進行調(diào)試了。
至此顶籽,我們的調(diào)試環(huán)境配置完畢玩般,今后如果書寫了復(fù)雜的Cloud Code,我們就可以進行最為直觀的調(diào)試了礼饱。