请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

编译模板报错

https://img1.sycdn.imooc.com/szimg//571342c8000164b705760326.jpg

"use strict"

// ejs模板
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.media_id %>]]></MediaId>
    </Image>
 <% } else if (msgType === "voice") {"%>
    <Voice>
        <MediaId><![CDATA[<% content.media_id %>]]></MediaId>
    </Voice>
 <% } else if (msgType === "video") {"%>
    <Video>
         <MediaId><![CDATA[<% content.media_id %>]]></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
}

第54行为var compiled = ejs.compile(tpl)

--------------------------------------------------------分割线------------------------------------------------------

看了大家的回答,改成以下

"use strict"

// ejs模板
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.media_id %>]]></MediaId>
    </Image>
 <% } else if (msgType === "voice") {"%>
    <Voice>
        <MediaId><![CDATA[<%= content.media_id %>]]></MediaId>
    </Voice>
 <% } else if (msgType === "video") {"%>
    <Video>
         <MediaId><![CDATA[<%= content.media_id %>]]></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
}

报了一个新的错

https://img1.sycdn.imooc.com/szimg//5713b90c00012c7005690340.jpg

这个ILLEGAL是什么意思呢?


正在回答

7回答

Scott 2016-04-18 10:32:18
 <% } else if (msgType === "image") {"%>
    <Image>
        <MediaId><![CDATA[<%= content.media_id %>]]></MediaId>
    </Image>
 <% } else if (msgType === "voice") {"%>
    <Voice>
        <MediaId><![CDATA[<%= content.media_id %>]]></MediaId>
    </Voice>
 <% } else if (msgType === "video") {"%>
    <Video>
         <MediaId><![CDATA[<%= content.media_id %>]]></MediaId>
         <Title><![CDATA[<%= content.title %>]]></Title>
        <Description><![CDATA[<%= content.description %>]]></Description>
    </Video>
 <% } else if (msgType === "music") {"%>
    <Music>


看到很多地方,多了 多余的引号呢: 

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


0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3173836 #1
    终于跑通了...很感谢.在网上查了说可能是变量的问题,检查很多次变量大小写,还一度怀疑是ejs.compile(tpl)没有传入第2个参数才没有编译成功.可能是之前复制过来的时候没有删干净.
    回复 有任何疑惑可以回复我~ 2016-04-18 11:49:06
  • 天啦噜,老师,run的时候,ejs会先校验模板是否正确么?
    回复 有任何疑惑可以回复我~ 2016-05-14 18:25:40
落叶无痕 2016-07-24 16:29:27

看了一下npm官网中对ejs的文档,其中

<% 'Scriptlet' tag, for control-flow, no output
<%= Outputs the value into the template (escaped)
<%- Outputs the unescaped value into the template


0 回复 有任何疑惑可以回复我~
提问者 慕粉3173836 2016-04-18 00:17:45

改成这样:

"use strict"

// ejs模板
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.media_id %>]]></MediaId>
    </Image>
 <% } else if (msgType === "voice") {"%>
    <Voice>
        <MediaId><![CDATA[<%= content.media_id %>]]></MediaId>
    </Voice>
 <% } else if (msgType === "video") {"%>
    <Video>
         <MediaId><![CDATA[<%= content.media_id %>]]></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
}

这次有新的错误:

https://img1.sycdn.imooc.com/szimg//5713b6ef00012c7005690340.jpg

这个ILLEGAL是什么意思呢?

0 回复 有任何疑惑可以回复我~
JokerQiu 2016-04-17 17:45:37

这个问题主要原因是,heredoc的模板写法有问题,对于赋值类的,要用<%= **** %>,对于逻辑类的<% %>,

<% if (msgType === "text") { %>
    <Content><![CDATA[<%= content %>]]></Content>
 <% }

这样写才是正确的

0 回复 有任何疑惑可以回复我~
Jerry_M 2016-04-17 16:39:18

逻辑的地方不要“=”符号

0 回复 有任何疑惑可以回复我~
Jerry_M 2016-04-17 16:38:31

<%%>改成<%= %>并且 等号前面不要有空格

0 回复 有任何疑惑可以回复我~
提问者 慕粉3173836 2016-04-17 16:10:51

修复了第15行msgType === "image,加了右引号,还是报相同错

第14行<%- content %>看视频老师也是这么写的,改成<% content %>也报相同错误

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信