8

私はNode、Express with EJSビューエンジン、nano(couchdb用)を使用していますが、SOまたはGoogを介したNode / JS固有の情報が見つからないという、このかなり不可解なエラーが発生しています。これをトリガーしていると思われるコードの領域には、CouchDBからドキュメントを取得し、一致するものを探して、オブジェクトをプライベートスコープの配列にプッシュするネストされた非同期コールバックが含まれます。

そしてエラー:

Express
500 SyntaxError: Missing catch or finally after try
at Object.Function (unknown source)
at exports.compile (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/ejs/lib/ejs.js:234:12)
at Object.exports.render (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/ejs/lib/ejs.js:273:10)
at View.exports.renderFile [as engine] (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/ejs/lib/ejs.js:303:22)
at View.render (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/express/lib/view.js:75:8)
at Function.app.render (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/express/lib/application.js:501:10)
at ServerResponse.res.render (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/express/lib/response.js:719:7)
at exports.dashboard.res.render.msg (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/routes/index.js:19:29)
at module.exports.read (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/api/Character.js:56:25)
at Request._callback (/Users/Keith/Desktop/netPoetica/1- Projects/dcc-chargen/node_modules/nano/nano.js:296:11)
4

3 に答える 3

19

エラーは、EJSテンプレートのifステートメントに角かっこがないことでした。そのトレースが示すように、このエラーが発生するのはexports.compile関数(res.render()によって呼び出されます)にありました)-lib作成者は文字列を使用して新しい関数を作成し、EJSファイルの機能をtryブロック。これは、ifブロックに開始ブラケットがないために、文字列として作成され、「new Function('str')」でビルドされた新しい無名関数で構文エラーが発生したため、ぶら下がり試行になります。

@TJCrowderは、スタックトレースが完全に明確であり、最終的にこのソリューションにつながったと指摘しました。サンプルコードの一部を削除したのは、それが最終的な問題に確実に関連していないためです。

于 2012-12-09T08:52:17.377 に答える
6

私にとっては、以下のforループで{が欠落しているため、エラーが発生しました。パランセシスの適切な開閉を探します。

<% for(var i=0;i<users.length;i++) %>   
    <li> <%= users[i]   %>  </li>
    <%}%>
    </ul>
    </p>
于 2015-07-12T13:55:04.490 に答える
2

このエラーのいくつかの「HelloWorld」の例。

シナリオ1(追加,

,間に余分なtry...catchもの(「if-else」構文の習慣から)。

/* Throw "message": "Uncaught SyntaxError: Missing catch or finally after try" */
try {
  /* do something */
},catch (error) {
  /* do something */
}

ここに画像の説明を入力してください

有効なコード:

/* Valid code */
try {
 /* do something */
}
catch (error) {
 /* do something */
}

シナリオ2

キャッチなしで試してください-または-最後に。

/* Throw error: Error: Missing catch or finally after try */
try {
  /* do something */
}

MDNドキュメント: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

于 2020-09-03T10:23:23.500 に答える