JHipster网关升级后yarn test出现URL错误的修复方法咨询
刚碰到这个问题的时候我第一反应就是看日志里的URL对比——undefinedordas/api/companies/123和undefined/ordas/api/companies/123,明摆着是baseUrl和API路径之间少了个斜杠,导致两段字符串直接连在一起了。结合你是从JHipster 4.13.3升级到4.14.1的背景,大概率是升级过程中实体服务的URL拼接逻辑出了小疏漏,下面是具体的排查和修复步骤:
1. 检查实体服务的URL拼接代码
先找到对应实体的服务文件,比如你的CompanyService,路径大概是src/main/webapp/app/entities/company/company.service.ts(如果是JS项目就是.js文件)。
找到类似这样的代码段:
get(id) { return this.http.get(`${this.baseUrl}ordas/api/companies/${id}`); }
这里的问题是this.baseUrl后面没有加斜杠,直接跟了ordas/api/companies,改成下面这样手动补上斜杠即可:
get(id) { return this.http.get(`${this.baseUrl}/ordas/api/companies/${id}`); }
注:如果你的baseUrl配置本身末尾就带有斜杠(比如http://localhost:8080/),这里可能会出现重复斜杠,但HTTP请求会自动处理,不过更严谨的方式是统一规则——要么baseUrl带斜杠,要么拼接时加,避免混合使用。
2. 验证全局API配置
打开src/main/webapp/app/config/app.constants.ts(或.js),检查里面的API基础URL配置,比如:
export const constants = { API_URL: process.env.API_URL || 'http://localhost:8080' };
如果这里的API_URL末尾没有斜杠,那在服务里拼接时就必须手动加;如果希望baseUrl自带斜杠,就改成:
API_URL: process.env.API_URL || 'http://localhost:8080/'
这样后续所有URL拼接都不用额外加斜杠了。
3. 排查升级带来的代码变更
因为你用了jhipster upgrade命令,升级过程中可能自动覆盖了部分实体服务的代码,导致原来正确的拼接逻辑被改掉了。可以用Git对比升级前后的代码差异,确认是不是这个原因——比如查看company.service.ts的历史提交,看URL拼接部分是不是被修改过。
4. 修复测试用例的期望(可选)
测试日志里的undefined应该是测试环境下baseUrl没有被正确注入导致的,但核心问题还是斜杠缺失。修复服务里的拼接逻辑后,测试用例的实际请求URL就会变成undefined/ordas/api/companies/123,和期望一致,测试就能通过了。
总的来说这个问题就是个小的URL拼接失误,补上斜杠就能解决,升级JHipster的时候偶尔会遇到这类自动生成代码的小问题,仔细对比日志里的差异就能快速定位~
内容的提问来源于stack exchange,提问作者1Z10

