0

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

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的与源文件不匹配的行是这样的:

app.use app.router  

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

我花了很长时间和很大的意志力才找到原因。同样,该错误位于应用程序下方的 3 层,即服务层。但是错误上没有提到下落,只是有一个unexpected TERMINATOR存档app.coffee

我对coffeescript 和node.js 还是很陌生,所以我的问题是,当您遇到这样的错误消息并且原因远在千里之外时,经验丰富的coffeescripters 或noders 将如何处理?也许有一些最佳实践或方法可以跟踪此类错误?还是从一开始就阻止它?

4

2 回答 2

2

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

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

于 2013-09-08T14:41:14.070 回答
1

hexacyanide 建议使用coffee编译器进行语法检查。如果您知道错误在哪里(在该答案的评论中提到),那就太棒了,但大多数时候您没有那个提示。

如果我认为可能存在语法错误,我所做的是编译我所有的 Coffeescript 源代码。我在另一个 SO answer的(后半部分)中描述了我是如何做到这一点的。

于 2013-09-11T17:26:32.563 回答