之前在Demo整合过没问题,结果好不容易整合到现在的项目,结果出现成这个鬼样子……问题找了好久,一直以为是SpringSecurity请求限制没放开,所以找SpringSecurity的debug日志,浏览器请求有没有404、500、502等,结果一切正常,最后才想起来看浏览器控制台,然后百度一圈没有解决方案,只能自己慢慢找了。
问题剖析
每个人的问题可能都不一样,这里提供问题解决思路,一劳永逸解决问题。
TypeError: Cannot read properties of undefined (reading 'namespace')
at classDef.construct (oryx.debug.js:10913:34)
at new classDef (oryx.debug.js:1747:54)
at app.js:107:45
at angular.min.js:67:279
at B (angular.min.js:94:5)
at B (angular.min.js:94:5)
at angular.min.js:95:173
at h.$eval (angular.min.js:103:456)
at h.$digest (angular.min.js:101:218)
找到最核心的app.js:107:45
,代码如下
function fetchModel(modelId) {
var modelUrl = KISBPM.URL.getModel(modelId);
$http({method: 'GET', url: modelUrl}).
success(function (data, status, headers, config) {
$rootScope.editor = new ORYX.Editor(data); //这里报错
$rootScope.modelData = angular.fromJson(data);
$rootScope.editorFactory.resolve();
}).
error(function (data, status, headers, config) {
console.log('Error loading model with id ' + modelId + ' ' + data);
});
}
使用console.log打印data的值瞬间明白了,我的项目使用ResponseBodyAdvice
拦截了所有请求,将JSON格式的返回值都规范化,因此解析失败
解决方案1:限制ResponseBodyAdvice作用范围
@RestControllerAdvice(basePackages = "com.xk857.module") //将其限制在项目业务层部分
public class ResponseHandler implements ResponseBodyAdvice<Object> {
// ……
}
解决方案2:修改js
这个需要按自己项目来,我的项目返回值都在data中,所以要写成 data.data
才可以
function fetchModel(modelId) {
var modelUrl = KISBPM.URL.getModel(modelId);
$http({method: 'GET', url: modelUrl}).
success(function (data, status, headers, config) {
$rootScope.editor = new ORYX.Editor(data.data);
$rootScope.modelData = angular.fromJson(data.data);
$rootScope.editorFactory.resolve();
}).
error(function (data, status, headers, config) {
console.log('Error loading model with id ' + modelId + ' ' + data);
});
}
BUG查找不易,点个赞再走吧~~~