使用Request-Promise与Tough-Cookie遇str.trim is not a function错误求助
我之前也踩过类似的兼容性坑,结合你提供的版本信息和代码,给你几个实用的解决思路:
1. 调整Tough-Cookie版本到兼容范围
Request-Promise@4.2.2对Tough-Cookie的版本依赖有特定范围,你当前用的2.3.4可能刚好触发了兼容性bug。试试降级到2.3.3版本,这个版本和Request-Promise@4.2.2的适配性更好:
npm install tough-cookie@2.3.3 --save-exact
2. 手动将Cookie对象转为字符串再传入
有时候直接传递Tough-Cookie对象给setCookie会导致内部解析异常,你可以先把Cookie转为标准字符串格式再传入:
let cookie = new tough.Cookie({ domain: '.companyName.ninja', httpOnly: true, name: '_application_session', path: '/', secure: false, value: 'f044888d39e2d19126716d9f54028700' }) let cookieJar = request.jar() // 先转换为字符串格式 let cookieStr = cookie.toString(); cookieJar.setCookie(cookieStr, 'http://application.companyName.ninja/') options.jar = cookieJar
3. 彻底清理依赖后重装
npm dedupe没效果的话,试试彻底清除现有依赖缓存和文件,重新安装确保依赖树干净:
# 删除依赖文件夹和锁文件 rm -rf node_modules package-lock.json # 清除npm缓存 npm cache clean --force # 重新安装依赖 npm install
4. 考虑替换Request-Promise(长期解决方案)
Request-Promise已经被官方弃用了,后续不会再更新维护,这类兼容性问题可能会越来越多。推荐换成更活跃的库,比如axios配合axios-cookiejar-support,或者node-fetch,它们的Cookie处理逻辑更稳定,社区支持也更好。
补充说明
这个str.trim is not a function错误通常是因为某个库预期处理字符串类型,但实际收到了非字符串(比如你的Cookie对象),而不同版本的Tough-Cookie在对象序列化逻辑上有差异,导致Request-Promise无法正确解析。上面的方法应该能帮你解决这个问题。
内容的提问来源于stack exchange,提问作者Kapil Chokhawala
相关产品推荐
相关产品推荐

