2017-01-26 8 views
1

基本的なMeteorアプリケーションでIronRouterとMeteor-SSRを使用してサーバーサイドのレンダリングを試みています。私は、ブラウザで/homeをロードすると、私は次のエラーを取得する:Meteor SSR「エラー:未定義をレンダリングできません」

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> 

答えて

1

あなた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

+0

感謝を見つけることができ、サーバー上の静的ファイルからテンプレートをコンパイルすることも良くあります。すでにmain.htmlに定義されているテンプレートを簡単に読み込む方法はありますか? meteor-ssrのドキュメントでは、「以前は、このパッケージは、あなたのアプリケーションが起動したときに、すべてのクライアント側のテンプレートをロードしますが、今は流星ではできません。この動作を実装する方法はありますか? –

関連する問題