SyntaxError: Unexpected token ) while compiling ejs

来源:4-3 第四天 自动回复各种消息

浮生_梦

2017-06-05

SyntaxError: Unexpected token ) while compiling ejs.

是因为版本的原因吗

ejs 2.5.6

node 6.10.2

写回答

3回答

Scott

2017-06-07

我目测是看到一些多余的空格,比如 %>]] 的 > 后面,以及 [[<% 的 < 前面。


试下这段源码:


'use strict'
var ejs = require('ejs')
var heredoc = require('heredoc')
var tpl = heredoc(function() {/*
  <xml>
  <ToUserName><![CDATA[<%= toUserName %>]]></ToUserName>
  <FromUserName><![CDATA[<%= fromUserName %>]]></FromUserName>
  <CreateTime><%= createTime %></CreateTime>
  <MsgType><![CDATA[<%= msgType %>]]></MsgType>
  <% if (msgType === 'text') { %>
    <Content><![CDATA[<%- content %>]]></Content>
  <% } else if (msgType === 'image') { %>
    <Image>
      <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
    </Image>
  <% } else if (msgType === 'voice') { %>
    <Voice>
      <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
    </Voice>
  <% } else if (msgType === 'video') { %>
    <Video>
      <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
      <Title><![CDATA[<%= content.title %>]]></Title>
      <Description><![CDATA[<%= content.description %>]]></Description>
    </Video>
  <% } else if (msgType === 'music') { %>
    <Music>
      <Title><![CDATA[<%= content.title %>]]></Title>
      <Description><![CDATA[<%= content.description %>]]></Description>
      <MusicUrl><![CDATA[<%= content.musicUrl %>]]></MusicUrl>
      <HQMusicUrl><![CDATA[<%= content.hqMusicUrl %>]]></HQMusicUrl>
      <ThumbMediaId><![CDATA[<%= content.thumbMediaId %>]]></ThumbMediaId>
    </Music>
  <% } else if (msgType === 'news') { %>
    <ArticleCount><%= content.length %></ArticleCount>
    <Articles>
    <% content.forEach(function(item) { %>
      <item>
        <Title><![CDATA[<%= item.title %>]]></Title>
        <Description><![CDATA[<%= item.description %>]]></Description>
        <PicUrl><![CDATA[<%= item.picUrl %>]]></PicUrl>
        <Url><![CDATA[<%= item.url %>]]></Url>
      </item>
    <% }) %>
    </Articles>
  <% } %>
  </xml>
*/})
var compiled = ejs.compile(tpl)
exports = module.exports = {
  compiled: compiled
}


0
2
浮生_梦
我在网上检测ejs语法。提示了unexpected space or tab 我还以为是开头哪里不能空格和tab混用。。没想到是中间空格的原因,也没见ejs的官网特意强调这个语法。
2017-06-07
共2条回复

浮生_梦

提问者

2017-06-06

'use strict'

var ejs = require('ejs')

var heredoc = require('heredoc')

var tpl = heredoc(function () {

        /*

                <xml>

                <ToUserName><![CDATA[ <%= toUserName %> ]]></ToUserName>

                <FromUserName><![CDATA[ <%= fromUserName %> ]]></FromUserName>

                <CreateTime> <%= createTime %> </CreateTime>

                <MsgType><![CDATA[<%= msgType %>]]></MsgType>


                <% if (msgType === 'text') { %>

                        <Content><![CDATA[ <%= content %> ]]></Content>

                <% }else if(msgType === 'image') { %>

                        <Image>

                                <MediaId><![CDATA[ <%= content.mediaId %> ]]></MediaId>

                        </Image>

                <% }else if(msgType === 'voice') { %>

                        <Voice>

                                <MediaId><![CDATA[ <%= content.mediaId %> ]]></MediaId>

                        </Voice>

                <% }else if(msgType === 'video') { %>

                        <Video>

                                <MediaId><![CDATA[ <%= content.mediaId %> ]]></MediaId>

                                <Title><![CDATA[ <%= content.title %> ]]></Title>

                                <Description><![CDATA[ <%= content.description %> ]]></Description>

                        </Video>

                <% }else if(msgType === 'music') { %>

                        <Music>

                                <Title><![CDATA[ <%= content.title %> ]]></Title>

                                <Description><![CDATA[ <%= content.description %> ]]></Description>

                                <MusicUrl><![CDATA[ <%= content.musicUrl %> ]]></MusicUrl>

                                <HQMusicUrl><![CDATA[ <%= content.hqMusicUrl %> ]]></HQMusicUrl>

                                <ThumbMediaId><![CDATA[ <%= content.thumbMediaId %> ]]></ThumbMediaId>

                        </Music>

                <% }else if(msgType === 'news') { %>

                        <ArticleCount><%= content.length %></ArticleCount>

                        <Articles>

                                <% content.forEach(function(item)){ %>

                                        <item>

                                                <Title><![CDATA[<%= item.title %>]]></Title>▒|

                                                <Description><![CDATA[<%= item.description %>]]></Description>

                                                <PicUrl><![CDATA[<%= item.picUrl %>]]></PicUrl>

                                                <Url><![CDATA[<%= item.Url %>]]></Url>

                                        </item>

                                <% }) %>

                        </Articles>

                <% } %>

                </xml>

        */

})


var compiled = ejs.compile(tpl)


exports = module.exports = {

        compiled:compiled

}


换了一下版本。还是不行。但是看了一下也没发现语法错误(也可能是没有找到)。

所以把整个代码都复制过来了。麻烦老师看一下。


0
0

Scott

2017-06-06

感觉不是,检查下模板的语法写的有没有错误


不过可以尝试,把  ejs 先卸载掉,然后装一个老一点的版本,比如 2.3.4 试试

0
0

7天搞定Node.js微信公众号

Koa框架、ES2015新特性、MongoDB,开发微信公众号

1742 学习 · 787 问题

查看课程