我有一个节点应用程序,其结构如下:
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?也许有一些最佳实践或方法来跟踪这样的错误?或者首先阻止它?
答案 0 :(得分:2)
要跟踪这样的错误,我会使用CoffeeScript to JavaScript转换器在尝试执行之前找到错误。由于堆栈跟踪将指向已编译的CoffeeScript文件,因此只有文件名才有用。
像here这样的工具在这种情况下很有用,您可以直接发布脚本以查看它是否正确解析。您还可以使用lint工具(例如此工具)来评估代码质量,以及正确的解析错误。
答案 1 :(得分:1)
hexacyanide建议使用coffee
编译器进行语法检查。如果您知道错误的位置(在该答案的评论中提到),这是很棒的,但大多数时候您没有该提示。
如果我认为可能存在语法错误,我会编译所有Coffeescript源代码。我在({3}}的{后半部分}中描述了我是如何做到的。