【发布时间】:2015-10-15 06:30:42
【问题描述】:
我在 WebStorm 10.0.4 中调试一个用 typescript 编写的节点服务器,当单步执行代码时,代码执行路径完全改变了。变量赋值似乎破坏并引用了不同的(不正确的)对象并破坏了我的代码。
我有一个类CustomerRoutes.ts,其中包含处理POST 请求的不同方法。我注册了端点:
app.post('/Contacts', jsonParser, CustomerRoutes.postContact);
CustomerRoutes.postContact 是一个public static 函数,定义为:
public static postContact(request, response) {
if(request.body.$type == 'Person') {
CustomerRoutes.postIndividual(request, response);
} else if(request.body.$type == 'Organization') {
CustomerRoutes.postOrganization(request, response);
}
}
CustomerRoutes.postIndividual 和 CustomerRoutes.postOrganization 也是 public static 函数。因此,当服务器处于非调试模式时,代码按预期执行并执行分支语句。但是,当单步执行代码时,变量 CustomerRoutes 全局变量会在 CustomerRoutes.postContact 的范围内重新分配给 request 的内容
正如您在调试器的“变量”窗口中看到的,变量 CustomerRoutes 已被重新定义两次,分别为 request 和 response 的值。所以现在当单步执行代码并调用函数 postIndividual 和 postOrganization 时,CustomerRoutes 不包含这些函数,POST 失败并出现异常和错误 500。
我不认为这是任何形式的比赛/计时条件,因此它一定是调试器环境中的错误。我的预感是打字稿变量映射无法与调试器一起正常工作,但我不确定。有没有人看到这样的问题或修复的想法?我从来没有见过这样的事情。我很高兴按要求发布更多信息。
【问题讨论】:
标签: node.js debugging typescript webstorm