NodeJS 错过捕捉或尝试后最终

rseugnpd  于 2023-02-08  发布在  Node.js
关注(0)|答案(4)|浏览(142)

我正在使用Node,Express with EJS view engine,nano(用于couchdb),我遇到了这个非常令人费解的错误,我无法通过SO或Google找到任何关于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)
kh212irz

kh212irz1#

这个错误是在我的EJS模板中的if语句上丢失了一个括号。正如跟踪所显示的,它是在exports.compile函数中(由res.render()调用)-lib作者使用字符串创建新函数,该函数将我的EJS文件功能封装在try块中,这变成了一个悬空的try,因为我在if块中丢失的左括号导致了新的匿名函数中的语法错误,该函数被创建为字符串并使用“new Function('str')"构建。
@ T. J. Crowder指出,堆栈跟踪非常清楚,最终导致了这个解决方案。我删除了一些示例代码,因为它肯定与最终问题无关。

2skhul33

2skhul332#

对我来说,是下面的for循环中缺少{导致了错误。请查找括号的正确结束或开始。

<% for(var i=0;i<users.length;i++) %>   
    <li> <%= users[i]   %>  </li>
    <%}%>
    </ul>
    </p>
xwbd5t1u

xwbd5t1u3#

这个错误的一些“hello world”例子。

场景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

使用try而不使用catch或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

uidvcgyl

uidvcgyl4#

我被困在同一个错误,尝试工作的js文件所有的时间来解决这个问题,后来删除的代码写在EJS文件和它的工作。所以问题是因为ejs和其他任何地方。

相关问题