我正在尝试在基本的Meteor应用程序中使用IronRouter和Meteor-SSR获得服务器端渲染。在浏览器中加载/home
时,出现以下错误:
Error: Can't render undefined
at checkRenderContent (packages/blaze.js:702:11)
at contentAsView (packages/blaze.js:724:3)
at Blaze.toHTML (packages/blaze.js:851:40)
at Object.SSR.render (packages/meteorhacks_ssr.js:208:10)
at [object Object].Router.route.where (main.js:9:20)
at boundNext (packages/iron_middleware-stack.js:408:31)
at runWithEnvironment (packages/meteor.js:1176:24)
at packages/meteor.js:1189:14
at [object Object].urlencodedParser (/Users/roger/.meteor/packages/iron_router/.1.1.1.1q7cd8x++os+web.browser+web.cordova/npm/node_modules1/body-parser/lib/types/urlencoded.js:84:40)
at packages/iron_router.js:886:36
这是该应用程序的代码:
// main.js
if (Meteor.isServer) {
Router.route('/home', function() {
let html = SSR.render('home');
this.response.end(html);
}, {where: 'server'});
}
if (Meteor.isClient) {
Router.route('/home', function() {
this.render("home")
});
}
这是
main.html
:<head>
<title>SSR Test</title>
</head>
<body>
</body>
<template name="home">
Home
</template>
最佳答案
发生这种情况是因为您的home
模板未在服务器上定义。要使用SSR
包,您需要先使用SSR.compileTemplate
编译服务器中的模板,然后才能使用SSR.render
进行渲染。这是一个简单的示例:
if (Meteor.isServer) {
const template = 'Hello {{username}}, <br> Now time is: {{time}}';
SSR.compileTemplate('hello', template);
Router.route('/home', function() {
const html = SSR.render('hello', {
username: 'foo',
time: new Date(),
});
this.response.end(html);
}, {where: 'server'});
}
还有一个更好的方法可以从服务器上的静态文件编译模板,该文件可以找到here
关于node.js - meteor SSR“错误:无法呈现未定义”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41864533/