coffeescript中无法追踪的错误

时间:2013-09-08 14:27:46

标签: node.js coffeescript

我有一个节点应用程序,其结构如下:

app.coffee -> routes -> controller -> service -> redis

在我的服务层的某个地方,我有一个像这样的错误:

if err?
    callback err
else if uid? 
    user = 
        uid: uid
        username: username
        callback null, user  # <- indentation is wrong
else
    callback null, null

在第7行看到回拨电话?它缩进了一个标签,超出了应有的范围。 以下是我运行应用程序时收到的内容:

> coffee app.coffee
app.coffee:15:24: error: unexpected TERMINATOR
routes app 
                       ^

app.coffee,btw上提到的与源文件不匹配的行是这样的:

app.use app.router  

routes = require './conf/routes'
routes app

我花了很长时间才找到原因。同样,该错误位于应用程序下方3层,位于服务层。但是在提及行踪的错误上没有任何内容,只有unexpected TERMINATOR文件上有app.coffee

我对coffeescript和node.js很新,所以我的问题是当你遇到这样的错误信息并且原因距离数英里之外,你如何继续,经验丰富的coffeescripters或noders?也许有一些最佳实践或方法来跟踪这样的错误?或者首先阻止它?

2 个答案:

答案 0 :(得分:2)

要跟踪这样的错误,我会使用CoffeeScript to JavaScript转换器在尝试执行之前找到错误。由于堆栈跟踪将指向已编译的CoffeeScript文件,因此只有文件名才有用。

here这样的工具在这种情况下很有用,您可以直接发布脚本以查看它是否正确解析。您还可以使用lint工具(例如此工具)来评估代码质量,以及正确的解析错误。

答案 1 :(得分:1)

hexacyanide建议使用coffee编译器进行语法检查。如果您知道错误的位置(在该答案的评论中提到),这是很棒的,但大多数时候您没有该提示。

如果我认为可能存在语法错误,我会编译所有Coffeescript源代码。我在({3}}的{后半部分}中描述了我是如何做到的。