如何调试?首先我们需要明确的是对Parse Server进行调试,而Parse Server本质是一个Node服务,所以最终转化为对node服务的调试。
通过分析Parse Server的Dockerfile的ENTRYPOINT
ENTRYPOINT ["node", "./bin/parse-server"]
结合我们的Docker Compose文件的Command指令
command: /parse-server/config/config.json
其实最终的Parse Server是通过下面这样的命令来启动的
node ./bin/parse-server /parse-server/config/config.json
我们可以通过添加--inspect参数来为node开启调试,同时通过Docker Compose的entrypoint参数来覆盖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端口,用于调试。同时通过制定entrypoint参数,开启node的inspect调试。注意这里我们使用了=0.0.0.0,这是由于容器内的IP的变化,我们不能使用localhost的127.0.0.1来进行调试。
下一步我们需要重新安装容器,先停止,然后删除,最后再安装
docker-compose stop
docker-compose rm
docker-compose up -d
然后我们调用下面的命令查看parse-server启动的logs
docker logs parse-server
你会发现下面这一行
Debugger listening on ws://0.0.0.0:9229/64a7d606-f353-4d42-b40f-f12019083e4b
For help, see: https://nodejs.org/en/docs/inspector
也就是Debugger已经开启。
接下来我们通过VSCode来进行调试
添加配置.png
如图,点击最左侧的bug图标跳转到调试主页面,然后添加配置。在弹出的下拉列表中选择node.js,选择添加node.js:添加到进程。此时VSCode会帮你生成一个launch.json文件。
编辑文件如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: 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,如果为远程,那么修改为远程服务器的地址
- localRoot:本地的源码位置,由于我们只需要调试cloud的代码,因此指定cloud目录即可
- remoteRoot:注意remoteRoot和localRoot必须指定相同的代码,一般是localRoot映射到服务器的目录。
- protocol:指定为inspector,无需修改。
这里address,localRoot,remoteRoot必须设置正确,否则可能会出现“断点未绑定”之类的错误。
接下来我们打开本地的main.js源文件,在第二行设置一个断点。然后点击绿三角开始调试,此时会出现一个调试条
截屏2022-10-16 17.24.13.png在命令行执行
curl -X POST \
-H "X-Parse-Application-Id: APPLICATION_ID" \
-H "Content-Type: application/json" \
http://localhost:1337/parse/functions/HelloCloud
该执行并不会输出结果,VSCode会显示程序在断点处暂停,此时你可以进行调试了。
截屏2022-10-16 17.26.53.png至此,我们的调试环境配置完毕,今后如果书写了复杂的Cloud Code,我们就可以进行最为直观的调试了。
网友评论