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 行目のコールバック呼び出しが見えますか? 必要以上に 1 タブ分インデントされています。そして、アプリを実行したときに受け取るものは次のとおりです。

> 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にまったく慣れていないので、私の質問は、このようなエラーメッセージが表示され、原因が何マイルも離れている場合、経験豊富なコーヒースクリプト担当者またはノード担当者はどのように対処しますか? このようなバグを追跡するためのベスト プラクティスや方法があるのではないでしょうか? それとも最初から防ぐ?

4

2 に答える 2

2

このようなエラーを追跡するには、CoffeeScript から JavaScript へのコンバーターを使用して、実行が試行される前にエラーを特定します。スタック トレースはコンパイルされた CoffeeScript ファイルを指すため、ファイル名だけが役立ちます。

その場合、ここにあるようなツールが役立ちます。スクリプトを直接投稿して、正しく解析されるかどうかを確認できます。このようなlintツールを使用して、コードの品質を評価し、解析エラーを修正することもできます。

于 2013-09-08T14:41:14.070 に答える
1

hexacyanide は、coffeeコンパイラを使用した構文チェックを提案しました。エラーの場所がわかっている場合は素晴らしいことですが (その回答のコメントに記載されています)、ほとんどの場合、そのヒントはありません。

構文エラーがあると思われる場合は、すべての Coffeescript ソースをコンパイルします。別の SO answer (の後半) でそれを行う方法を説明します。

于 2013-09-11T17:26:32.563 に答える