Nodemon与Node对比:代码在Node可运行但Nodemon中失效问题咨询
原因分析
- 文件改动触发nodemon意外重启:nodemon默认会监听项目下所有
.js/.json/.coffee等后缀的文件变更,一旦检测到文件修改就会自动重启Node进程。你代码中会生成./allParams.json文件,写入操作触发了nodemon的重启规则,导致刚触发的Python脚本调用被中断,而直接运行node app.js没有文件监听逻辑,不会出现这个问题,这是最常见的原因。 - 工作目录解析不一致:你代码中使用了相对路径定位
allParams.json和Python脚本,如果nodemon是全局安装、或者你执行nodemon app.js的工作目录和执行node app.js的目录不匹配,会导致相对路径解析失败,出现文件写入失败、找不到Python脚本的问题。你可以在代码开头添加console.log(process.cwd()),分别用两种方式启动验证工作目录是否一致。 - 子进程信号处理逻辑差异:nodemon作为父进程托管Node子进程时,对
SIGCHLD等子进程信号的处理逻辑和直接运行Node进程不同,可能会将Python子进程的输出/退出信号误判为Node进程异常,直接终止服务。
配套解决方案
- 配置nodemon忽略规则,避免非代码文件改动触发重启:
你可以在项目根目录新建nodemon.json配置文件,内容如下:
{ "ignore": ["*.json", "*.py", "upload_files/*"] }
也可以启动时直接加参数:nodemon --ignore '*.json' app.js
2. 替换相对路径为绝对路径,避免路径解析异常:
引入path模块拼接绝对路径:
const path = require('path'); // 配置文件绝对路径 const paramPath = path.resolve(__dirname, './allParams.json'); // Python脚本绝对路径 const pyPath = path.resolve(__dirname, './path/to/my/main.py');
- 补充错误排查逻辑:你的代码当前没有打印
stderr内容,也没有给路由返回响应,建议补充日志打印和请求响应逻辑,方便定位问题。
另外你贴出的代码存在笔误:你定义了let allParameters = req.body,但写入文件时用的是JSON.stringify(data),data变量未定义,如果实际运行代码也有这个问题需要先修正。
内容的提问来源于stack exchange,提问作者shredGnar
相关产品推荐
相关产品推荐

