我正在使用express编写一个应用程序,并使用ejs作为视图/模板引擎。
在路径
我已经看到了this相关问题,但它没有解决我的用例。
一切似乎很清楚,但我无法使用模板呈现数据。我想在服务器端编译模板,将其准备好发送给客户端,然后在需要时使用从AJAX调用接收到的数据填充它。
我所做的:
在调用
但是当我调用时,我收到以下信息:
我可能需要在客户端也使用模板吗?
在路径
/artists
处,我正在呈现视图artists.ejs
,其中包含艺术家封面。单击封面时,我想要进行AJAX调用以检索相应的数据,将其放置在我的艺术家artist.ejs
的模板/视图中,并在我的HTML下方显示此模板。我已经看到了this相关问题,但它没有解决我的用例。
一切似乎很清楚,但我无法使用模板呈现数据。我想在服务器端编译模板,将其准备好发送给客户端,然后在需要时使用从AJAX调用接收到的数据填充它。
我所做的:
在调用
/artists
时,在服务器端使用ejs.compile(str, opt)
进行编译:router.get('/artists', function(req, res) {
// Compile artist template
fs.readFile('views/artist.ejs', "utf-8", function(err, template) { // Convert template file to string
artist_template = ejs.compile(template); // Compile template
res.render('artists.ejs', {template: artist_template}); // render page with compiled template
});
我负责将文件转换为字符串,因为ejs编译器只能使用字符串(与Jade .compileFile相比)
然后在客户端,我获取该函数:
<script>
var template = <%= template %>
</script>
然后在另一个脚本中,我通过AJAX调用检索数据:
$.get('/artists/'+artist_name, function(data) {
var html = template({artist: data});
$('#artist-page').html(html);
}
但是当我调用时,我收到以下信息:
当我调用模板未捕获的引用错误:fn未定义
fn
时,我收到以下信息:
函数未捕获的引用错误:opts未定义。
fn
是否硬编码? 我已阅读EJS和Jade文档,但与我的问题相关的信息很少。我可能需要在客户端也使用模板吗?