# 应用开发排错

# 概述

开发应用时,通常从模版拷贝并修改后挂载到模块菜单中。即使仔细修改,也常因疏忽导致应用功能异常。本节介绍最常见的几个问题及排查方法。

# 一、常见问题

# 问题1:列表为空(无数据行)

现象:成功添加数据后,列表仍然为空,没有显示任何数据行。

模拟演示

  • 正常状态下,设备登记模块显示2条数据(Max泵、野马水泵)
  • 修改排序字段后,列表变为空

文件路径wwwroot\Apps\samples\Device.js

// 第14-17行:缺省排序字段配置
sorters: {
    property: 'StartDate',  // 排序字段
    direction: 'DESC'
}

错误原因: 从模版复制后,忘记修改排序字段。如果该字段在新应用中不存在,后台服务查询数据时使用该字段排序会出错。

修复方法: 将property改为新应用中实际存在的字段名。


# 问题2:列表有行数但列内容为空

现象:列表显示有数据行,但每一列的内容都是空的。

模拟演示:设备登记模块正常显示2行数据,修改数据实体后列表列内容为空。

文件路径Web项目\Apps\Controllers\SampleDeviceController.cs

// 第19行:控制器继承的泛型类型
public class SampleDeviceController : AppControllerBase<SampleDevice>

错误原因: 从模版复制后,忘记修改数据库实体类型。导致使用了模版中原来的数据实体对应的表,列名对不上,所以显示为空。

修复方法: 将泛型类型<SampleDevice>改为新应用对应的数据实体类。


# 问题3:服务地址不匹配

现象:列表无法加载数据。

文件路径

  • 后台:Web项目\Apps\Controllers\SampleDeviceController.cs
  • 前台:wwwroot\Apps\samples\Device.js

后台服务地址

// 第17行:后台服务路由
[Route("app/samples/device")]

前台服务地址

// 第4行:前台调用的服务地址
serviceUrl: Yiez.$url('app/samples/device'),

错误原因

  • 前后台服务地址不匹配
  • 前台服务地址指向不存在的路径

修复方法: 确保前后台服务地址完全一致。


# 二、排查方法

# 使用浏览器开发者工具排查

当遇到上述问题或其它异常时,可通过以下步骤排查:

  1. 打开开发者工具:在应用页面按 F12

  2. 切换到Network标签页:点击“网络”(Network) 标签页

  3. 刷新数据:点击应用列表底部的分页条,触发数据请求

  4. 查找请求:在网络请求列表中找到获取列表数据的请求

  5. 查看响应:点击该请求,查看“响应”(Response) 内容

效果: 如果后台服务出错,即使前台没有显示错误,响应中也会返回详细的错误信息。例如:

{
    "success": false,
    "errorMessage": "排序字段不存在"
}

# 三、排查清单

开发新应用时,从模版拷贝后重点检查以下三项:

检查项 位置 常见问题
排序字段 前台sorters配置 字段在新应用中不存在
数据实体 后台控制器泛型类型 使用了模版的旧实体
服务路由 前后台serviceUrlRoute 地址不一致或路径错误

# 四、总结

以上三个常见问题,归根结底都是由于从模板拷贝后,前台配置与后台服务未能完全同步导致的。开发新应用时,重点检查:

  • 排序字段:确保字段在新应用中存在
  • 数据实体:改为新应用对应的实体类
  • 服务路由:确保前后台地址一致

当发现问题时,先确认是否属于以上常见问题;如果不是,使用浏览器开发者工具的Network标签页查看响应内容,获取详细错误信息进行排查。