javascript - 在 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 机制的一个重要部分。
解决方案
问题不在于它位于不同的行,而在于它位于不同的<% %>
代码块中。你不能这样做,因为它们应该能够在它们之间拥有内容,而当代码必须是连续的时,这是没有意义的。(在这种情况下,它们之间甚至有内容:空白。)
跨多行应该没问题:
<% User.findOne({ data: 'random string' })
.then()
.catch(); %>
到那时你可能会遇到 promise 在模板中无用的问题。不过,总的来说,将查询排除在外是一个好主意。
推荐阅读
- javascript - Dojo javascript 工具包,我在一个模块中定义了两个函数。我怎么能从另一个打电话给一个
- signalr - 信号连接到集线器但不能调用方法
- python - 将函数动态插入 Python 类
- flutter - Flutter Mobx - 在 PageView 的页面之间传递存储状态
- haskell - 如何从 Haskell Stack 构建中编译可执行文件?
- mysql - Sequelize Op.or order by first by exact match first
- javascript - 如何重置jquery动态选择选项?
- python - 如何在 os.utime 中使用 windows 路径?
- java - 尽管在 java 中正确初始化了 arraylist,但得到一个错误
- javascript - 如何更改此功能以显示一个结果?