.ejs文件如果包含else语句则不呈现

时间:2017-02-22 12:18:06

标签: node.js express ejs

我正在使用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"} %>行,一切都会完美无缺!是什么给了什么?

2 个答案:

答案 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发布的答案。