将 ejs 与 express 一起使用会返回意外的令牌 < used

Posted

技术标签:

【中文标题】将 ejs 与 express 一起使用会返回意外的令牌 < used【英文标题】:Using ejs with express returns unexpected token < used 【发布时间】:2019-06-06 01:14:41 【问题描述】:

这是我第一次尝试使用 Ejs,我想我的语法都是正确的。不明白怎么回事

const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");

const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded(extended:true));
let today = new Date();
let options = 
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric"
;

let day = today.toLocaleDateString("en-US", options);
let todoList = ["Sleep","Eat","?"];
app.get("/", function(req, res)
 res.render("index", 
   day: day,
   todoList: todoList
  );
);
app.post("/", function(req, res)
  let newInput = req.body.todoInput;
  todoList.push(newInput);
);

app.listen(3000, function()
  console.log("Server started on port 3000.");
);

我的 ejs

<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>Ra's To-do List</title>
</head>

<body>
  <p>
    <%= day %> : Today's to-do list</p>
  <ul>
     <% for (var i=0, i< todoList.length, i++)  %>
    <li> <%= todoList[i] %> </li>
    <%  %>
  </ul>
  <form action="/" method="post">
    <input type="text" name="todoInput" placeholder="Add to your to-do list here">
    <button type="submit" name="button">Add stuff to-do</button>
  </form>
</body>

</html>

我正在使用 WSL 并已正确安装所有模块。它在编译 ejs 时给出了意外的令牌

SyntaxError: Unexpected token

如果上述错误没有帮助,您可能想尝试 EJS-Lint: https://github.com/RyanZim/EJS-Lint 或者,如果您打算创建一个 async 函数,传递 async: true 作为选项。 在新函数 () 在 Template.compile (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/ejs/lib/ejs.js:618:12) 在 Object.compile (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/ejs/lib/ejs.js:389:16) 在句柄缓存(/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/ejs/lib/ejs.js:212:18) 在 tryHandleCache (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/ejs/lib/ejs.js:251:16) 在 View.exports.renderFile [作为引擎] (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/ejs/lib/ejs.js:482:10) 在 View.render (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/express/lib/view.js:135:8) 在 tryRender (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/express/lib/application.js:640:10) 在 Function.render (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/express/lib/application.js:592:3) 在 ServerResponse.render (/mnt/c/Users/PraveshRana/Desktop/webDev/ejs-todo/node_modules/express/lib/response.js:1008:7)

【问题讨论】:

请发布完整的错误堆栈以便快速了解问题 @kRiZ SyntaxError: Unexpected token 在 for 循环中使用分号 ( ; ) 而不是逗号 ( , ) 【参考方案1】:

我认为问题在于您在 ejs 语句中使用逗号而不是分号。

所以而不是:

<% for (var i=0, i< todoList.length, i++)  %>

应该是:

<% for (var i=0; i< todoList.length; i++)  %>

干杯, 艾丹。

【讨论】:

【参考方案2】:

使用:

<% for (var i=0; i< todoList.length; i++)  %> 

代替:

<% for (var i=0, i< todoList.length, i++)  %>

, 替换为;

【讨论】:

以上是关于将 ejs 与 express 一起使用会返回意外的令牌 < used的主要内容,如果未能解决你的问题,请参考以下文章

如何将 req.flash() 与 EJS 一起使用?

尝试将 Node.js (Express) 设置为与虚拟主机一起使用,并遇到意外错误

在Javascript(node.js,express.js,ejs)中访问服务器端变量[关闭]

使用 Node、Express 和 EJS 压缩 HTML?

一起学Node.js

在 express 节点 js 中重新渲染 EJS 模板