首页 > 解决方案 > 在 EJS 模板中,为什么 Javascript 承诺在写在 1 行时可以工作,但在 3 行时会失败?

问题描述

以下代码行搜索 mongodb 数据库并返回一个承诺。当包含在 app.js 中时,它可以按预期工作。

User.findOne({ data: 'random string'}).then().catch();

当 EJS 模板中包含同一行代码时,它也可以按预期工作。

<% User.findOne({ data: 'random string'}).then().catch(); %>

但是,当它在 EJS 模板中分成 3 条单独的行时,它会引发错误。

<% User.findOne({ data: 'random string'}) %> 
<% .then() %>
<% .catch(); %>

SyntaxError: Unexpected token 。在 C:\fileLocation\index.ejs 中编译 ejs

问:为什么会这样?显然我误解了 EJS 机制的一个重要部分。

标签: javascriptnode.jsejs

解决方案


问题不在于它位于不同的行,而在于它位于不同的<% %>代码块中。你不能这样做,因为它们应该能够在它们之间拥有内容,而当代码必须是连续的时,这是没有意义的。(在这种情况下,它们之间甚至有内容:空白。)

跨多行应该没问题:

<% User.findOne({ data: 'random string' })
    .then()
    .catch(); %>

到那时你可能会遇到 promise 在模板中无用的问题。不过,总的来说,将查询排除在外是一个好主意。


推荐阅读