我正在使用Express创建一个小型的Node web应用程序。但是如果我的ejs文件包含else语句,我会收到错误。如果不清楚,这是一个MWE:
页/ test.ejs:
<html>
<head></head>
<body>
<% var foo = "x"; %>
<% if (2==3) {foo = "y";} %>
<% else {foo = "z";} //If I delete this line, everything works %>
<%= foo %>
</body>
</html>
index.js:
var express = require('express');
var app = express();
app.set('port', (process.env.PORT || 5000));
app.set('views', __dirname + '/pages');
app.set('view engine', 'ejs');
app.get('/test/', function(request, response) {
response.render("test");
});
如果我然后尝试访问localhost:5000 / test,我只看到此错误消息:
SyntaxError:编译ejs时C:\ path \ to \ my \ files \ pages \ test.ejs中的意外的令牌
如果上述错误无效,您可以尝试使用EJS-Lint: https://github.com/RyanZim/EJS-Lint 在新的功能() 在Template.compile(C:\ path \ to \ my \ files \ node_modules \ ejs \ lib \ ejs.js:524:12) 在Object.compile(C:\ path \ to \ my \ files \ node_modules \ ejs \ lib \ ejs.js:338:16) 在handleCache(C:\ path \ to \ my \ files \ node_modules \ ejs \ lib \ ejs.js:181:18) 在tryHandleCache(C:\ path \ to \ my \ files \ node_modules \ ejs \ lib \ ejs.js:203:14) 在View.exports.renderFile [作为引擎](C:\ path \ to \ my \ files \ node_modules \ ejs \ lib \ ejs.js:412:10) 在View.render(C:\ path \ to \ my \ files \ node_modules \ express \ lib \ view.js:126:8) 在tryRender(C:\ path \ to \ my \ files \ node_modules \ express \ lib \ application.js:639:10) 在Function.render(C:\ path \ to \ my \ files \ node_modules \ express \ lib \ application.js:591:3) 在ServerResponse.render(C:\ path \ to \ my \ files \ node_modules \ express \ lib \ response.js:960:7)
但如果删除<% else {foo = "z"} %>
行,一切都会完美无缺!是什么给了什么?
答案 0 :(得分:1)
这应该对你有用
extension Array {
subscript(indexPath: IndexPath) -> Element {
get {
return self[indexPath.row]
}
set {
self[indexPath.row] = newValue
}
}
}
或者如果您需要单独的行
<html>
<head></head>
<body>
<% var foo = "x"; %>
<% if (2==3) {foo = "y";} else {foo = "z";} %>
<%= foo %>
</body>
</html>
答案 1 :(得分:0)
您可以尝试从独立脚本编译模板:
const ejs = require('ejs');
console.log(ejs.compile(`
<html>
...
</html>
`, { debug : true }));
设置debug
option后,您可以看到模板编译到的内容:
var __output = [], __append = __output.push.bind(__output);
with (locals || {}) {
; __append("\n<html>\n<head></head>\n<body>\n ")
; var foo = "x";
; __append("\n ")
; if (2==3) {foo = "y";}
; __append("\n ")
; else {foo = "z";}
; __append("\n\n ")
; __append(escapeFn( foo ))
; __append("\n</body>\n</html>\n")
}
return __output.join("");
注意; __append()
和if
行之间插入else
的方法,打破了if () { ... } else { ... }
的语法。
对于解决方案,我会按照@ ponury-kostek发布的答案。