8

我正在使用 Node、Express 和 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

此错误的一些“hello world”示例。

场景一(额外,

,之间的额外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

使用 try 而不使用 catch -or- finally。

/* 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 回答