【问题标题】:Unexpected token return in ,while compiling ejs编译 ejs 时出现意外的令牌返回
【发布时间】:2017-08-15 22:07:38
【问题描述】:

我正在尝试开发一个留言簿应用程序,它存储用户名、国家和用户消息 sin mongodb,连接正常,我可以在数据库中提交这 3 个信息(用户名、国家和消息)。我的问题是将消息呈现到我的“guestbook.ejs”页面中。

如果有人能就我遇到的问题给我一个线索,我将不胜感激。

SyntaxError: Unexpected token return in /Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/views/pages/guestbook.ejs while compiling ejs

If the above error is not helpful, you may want to try EJS-Lint:
https://github.com/RyanZim/EJS-Lint
   at Object.Function (<anonymous>)
   at Object.Template.compile (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/ejs/lib/ejs.js:524:12)
   at Object.compile (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/ejs/lib/ejs.js:338:16)
   at handleCache (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/ejs/lib/ejs.js:181:18)
   at tryHandleCache (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/ejs/lib/ejs.js:203:14)
   at View.exports.renderFile [as engine] (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/ejs/lib/ejs.js:412:10)
   at View.render (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/express/lib/view.js:126:8)
   at tryRender (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/express/lib/application.js:639:10)
   at EventEmitter.render (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/express/lib/application.js:591:3)
   at ServerResponse.render (/Users/mesfint/Desktop/MEAN_DEV'T/Guestbook-application/node_modules/express/lib/response.js:960:7)

guestbook.ejs

<!DOCTYPE html>
<html lang="en">
<head>

    <% include ../partials/head %>
</head>

<body class="container">

    <header>
        <% include ../partials/header %>


    </header>
    <main>
        <div class="jumbotron">
            <h4><%= guest_message %></h4>
           <table  border = "1">
               <tr>

                    <th>Name</th>
                    <th>Country</th>
                    <th>Message</th>
                </tr>
           <!-- <% jsonData.forEach(function(users){%>-->
            <% for(var i=0; i<newmessage.length; i++) {%>


                <tr>

                    <td class="userInput"><%= newmessage[i].username %></td>
                    <td class="userInput"><%= newmessage[i].country %></td>
                    <td class="userInput"><%= newmessage[i].message %></td>
                </tr>


            <%} %>
            </table>

</div>
    </main>

     <footer>
<% include ../partials/footer %>
</footer>
</body>

</html>

server.js

    var express = require("express");
    var bodyParser = require('body-parser');
    var app = express();
    var fs = require("fs");
    var MongoClient = require('mongodb').MongoClient;

    var db;


app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static('public'));

    MongoClient.connect('mongodb://mesfin:######@ds137090.mlab.com:37090/guestbook', function(err, database)  {
  if (err) return console.log(err)
  db = database;
  app.listen(3000, function () {
    console.log('listening on 3000');
  })
})

    app.get("/", function(req,res){
    res.render("pages/index", {

        title_index: "What we speak?",
         content_index:"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore",

         footer_index:"My footer goes here"
        });


    });


    app.get("/guestbook", function(req,res){

       // res.render("pages/guestbook",{
      db.collection('newmessage').find().toArray(function (err, result)  {
    if (err) return console.log(err)
    res.render('pages/guestbook', {newmessage: result});

  });

        });


    app.get("/newmessage", function(req,res){
        res.sendFile(__dirname  + "/pages/newmessage");

        res.render("pages/newmessage",{
            add_newMessage:"Add Your info & message!"
        });

    });

    app.post("/newmessage" , function(req,res){
db.collection('newmessage').save(req.body, function(err, result) {
    if (err) return console.log(err);
    console.log('saved to database');
    res.redirect('/');
  });

    });

【问题讨论】:

  • 应该是&lt;%- include,而不是&lt;% include
  • 感谢@BenFortune,但我仍然认为输出没有区别,但很感激!
  • 尝试将 &lt;% include ../path/to/include %&gt; 更改为 &lt;%- include ('../path/to/include') %&gt;
  • @ponury-kostek,没有变化,但谢谢

标签: node.js express ejs


【解决方案1】:

代替

 <% include ../partials/head %>

<%- include ("../partials/head") %>

【讨论】:

  • 模板标签
  • 所以这个语法随着更新的版本而改变了,对吧?
  • 据我所知,它们是自 ejs 创建以来,但每个标签都有自己的实用程序。可以看到here的所有标签。
【解决方案2】:

&lt;/table&gt; 之前添加&lt;%})%&gt; 或删除&lt;!-- &lt;% jsonData.forEach(function(users){%&gt;--&gt;,因为您没有关闭forEach

HTML 注释 &lt;!-- --&gt; 不影响 ejs。你可以改用{# #}

【讨论】:

    【解决方案3】:

    删除代码中不必要的 标记

    【讨论】:

    • 由于您的嵌入式 ejs 属性在输出数据元素中不匹配,导致意外令牌。例如。您的服务器端数据,例如 var data = {"name":"Joseph","age":21};你的 ejs 页面代码可能是 除了这个数据 这个不需要的标签通过错误消息。
    【解决方案4】:

    在我的例子中,我发现包含部分模板的错误如下所示

    <% include ./partials/messages %>
    

    所以我用以下改变它

    <%- include ('partials/messages') %>
    

    对我有用,希望对你有帮助

    【讨论】:

      【解决方案5】:

      问题出在您的节点路由中。 在你的/newMessage 路由重写

      res.render("pages/newmessage", 
      

      res.render("/pages/newmessage",
      

      也在你的/guestbook 路由中 重写

      res.render("pages/guestbook", 
      

      res.render("/pages/guestbook",
      

      尝试在节点路由https://dev.to/ericchapman/nodejs-express-part-5-routes-and-controllers-55d3查看这篇文章

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多