升级normalize-url依赖后出现permission denied错误该如何解决?
问题根因分析
你遇到的报错本质是运行node服务的用户没有initial-db.json的写入权限,和normalize-url依赖升级直接相关:
normalize-url 4.5.1修复了CVE-2021-33502安全漏洞,修改了路径解析逻辑,你项目依赖的json-server内部调用了normalize-url处理请求路径,升级后search请求的路径解析结果发生变化,触发了json-server的默认写入逻辑,而你升级前的解析逻辑只会触发只读操作,所以之前不会报错。
可行解决方案
你可以根据自己的业务场景选择以下任意一种方案:
- 方案1:给服务运行用户开放文件写入权限
仅给服务对应的运行账号开放文件读写权限即可,生产环境不建议直接给所有用户开放权限:# 替换<服务用户名> <服务用户组>为你实际运行node服务的账号信息 sudo chown <服务用户名>:<服务用户组> /prod/msp/apps/src/data/initial-db.json sudo chmod 644 /prod/msp/apps/src/data/initial-db.json - 方案2:开启json-server只读模式
如果你不需要通过接口修改initial-db.json的内容,启动json-server时添加--read-only参数即可关闭所有写入逻辑,从根源避免写文件操作:# 原有启动命令新增--read-only参数即可,示例如下 json-server --read-only /prod/msp/apps/src/data/initial-db.json - 方案3:升级适配的json-server版本
新版json-server已经适配了normalize-url 4.5.1的路径解析逻辑,直接升级json-server到最新稳定版即可解决路径匹配错误的问题:npm install json-server@latest
内容的提问来源于stack exchange,提问作者Constantin
相关产品推荐
相关产品推荐

