描述bug
TypeError: Cannot read properties of undefined (reading 'charAt')
at resolveURL (/Users/dennymueller/IdeaProjects/forest-school-saxony/node_modules/axios/dist/node/axios.cjs:3241:44)
at standardBrowserEnv (/Users/dennymueller/IdeaProjects/forest-school-saxony/node_modules/axios/dist/node/axios.cjs:3247:17)
at Object.<anonymous> (/Users/dennymueller/IdeaProjects/forest-school-saxony/node_modules/axios/dist/node/axios.cjs:3260:5)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Module.require (node:internal/modules/cjs/loader:1141:19)
at require (node:internal/modules/cjs/helpers:110:18)
at Object.<anonymous> (/Users/dennymueller/IdeaProjects/forest-school-saxony/node_modules/@nestjs/axios/dist/http.module.js:16:33)
上述错误导致我的应用程序在启动时失败。
这个错误明确发生在使用最新版本1.6.1,而不是1.6.0的情况下。
而且只有在我使用应用程序的生产构建,而不是开发模式时才会出现这个问题。
我正在使用webpack、nestjs、angular以及angular-universal和domino作为ssr的模拟。
重现问题
查看项目:
https://github.com/denny99/axios-ticket.git
运行:
npm ci
npm run build
npm start
出现错误消息,表示axios包未安装。
这个陈述并不完全正确。它的原因是require axios失败了。
为了方便调试,我在backend/main.ts的第12行添加了一个require('axios')
。
现在它可以打印完整的堆栈跟踪。
将axios包更改为1.6.0
npm i
npm run build
npm start
然后它再次启动,没有错误。
代码片段
系统在nest.js中要求这个包时崩溃。
在这段代码片段中失败:
// nest.js original code
const axios_1 = __importDefault(require("axios"));
// code in axios.cjs
return {
href: urlParsingNode.href,
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
host: urlParsingNode.host,
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
hostname: urlParsingNode.hostname,
port: urlParsingNode.port,
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
urlParsingNode.pathname :
'/' + urlParsingNode.pathname
};
预期行为
没有崩溃,就像在1.6.0中一样。
Axios版本
1.6.1
适配器版本
- 无响应*
浏览器
- 无响应*
浏览器版本
- 无响应*
Node.js版本
v18.16.0
OS
- 无响应*
其他库版本
NestJS ~10.0.0
Angular ~16.2.0
Domino ^2.1.6
其他上下文/截图
- 无响应*
6条答案
按热度按时间qhhrdooz1#
这个问题确实与多米诺骨牌SSR填充有关。
更具体地说:
global['document'] = win.document;
取消注解这一行可以让应用程序再次启动。
因此,“浏览器检查”必须与axios 1.6.0相比在1.6.1中发生了变化。
sycxhyv72#
这个可以改为空值检查吗:路径名:(urlParsingNode.pathname?.charAt(0) === '/')
fjaof16o3#
关于这个问题的更新?
我正在遇到相同的问题
使用的是
Angular 17
@angular/ssr
domino-ext
mf98qq944#
我通过将vitest配置环境从happy-dom更改为jsdom来解决这个问题,现在它可以正常工作了。
o2rvlv0m5#
关于上述问题的任何更新?在Angular SSR中也遇到了相同的问题,尝试了不同的方法,但仍然没有成功。
t2a7ltrp6#
我最终通过将vitest配置环境从happy-dom更改为jsdom来解决这个问题,它可以正常工作。
@jgreer9514 你能分享一下你的happy-dom配置吗?