2016-04-13 13 views
2

エクスプレスフレームワークをビューエンジンとして使用してExpressフレームワークを使用してnodejsアプリケーションを作成しようとしていますが、ホームページ:Express-Handlebarsビューエンジンを使用してExpress 4.xフレームワークで部分図をレンダリングする

Error: You must pass a string or Handlebars AST to Handlebars.compile. You passed [object Object]

誰が間違ってここに行くいただきました!私に知らせてくださいすることができます。 GitHubのレポへ

リンク:以下https://github.com/bdinesh/LearningNode.git

私が実行しようとしているコードです:

index.js

var express = require('express'), 
    app = express(), 
    hbs = require('express-handlebars'), 
    // Create `ExpressHandlebars` instance with a default layout. 
    hbsInstance = hbs.create({ 
     defaultLayout: 'main', extname: '.hbs' 
    }), 
    fortune = require('./lib/fortune.js'), 
    weatherData = require('./lib/weather.js'); 

app.engine('hbs', hbsInstance.engine); 
app.set('view engine', 'hbs'); 
app.set('port', process.env.PORT || 3000); 
app.use(express.static(__dirname + '/public')); 

app.use(function(req, res, next) { 
    if (!res.locals.partials) { 
     res.locals.partials = {}; 
    } 

    res.locals.partials.weather = weatherData.getWeatherData(); 
    next(); 
}); 

app.get('/', function(req, res) { 
    res.render('home'); 
}); 

app.listen(app.get('port'), function() { 
    console.log('Express started on http://localhost:' + app.get('port')); 
}); 

は、これは中に置かれをweather.js libフォルダ

exports.getWeatherData = function getWeatherData() { 
    return { 
     locations: [ 
      { 
       name: 'Portland', 
       forecastUrl: 'http://www.wunderground.com/US/OR/Portland.html', 
       iconUrl: 'http://icons-ak.wxug.com/i/c/k/cloudy.gif', 
       weather: 'Overcast', 
       temp: '54.1 F (12.3 C)', 
      }, 
      { 
       name: 'Bend', 
       forecastUrl: 'http://www.wunderground.com/US/OR/Bend.html', 
       iconUrl: 'http://icons-ak.wxug.com/i/c/k/partlycloudy.gif', 
       weather: 'Partly Cloudy', 
       temp: '55.0 F (12.8 C)', 
      }, 
      { 
       name: 'Manzanita', 
       forecastUrl: 'http://www.wunderground.com/US/OR/Manzanita.html', 
       iconUrl: 'http://icons-ak.wxug.com/i/c/k/rain.gif', 
       weather: 'Light Rain', 
       temp: '55.0 F (12.8 C)', 
      }, 
     ], 
    }; 
}; 

weather.hbs(部分表示)これはviews/partialsフォルダに配置されています。ビューに配置された

<div class="weatherWidget"> 
    {{#each partials.weather.locations}} 
    <div class="location"> 
     <h3>{{name}}</h3> 
     <a href="{{forecastUrl}}"> 
      <img src="{{iconUrl}}" alt="{{weather}}"> 
      {{weather}}, {{temp}} 
     </a> 
    </div> 
    {{/each}} 
    <small>Source: <a href="http://www.wunderground.com">Weather Underground</a></small> 
</div> 

home.hbs

<h1>Welcome to Meadowlark travel</h1> 
{{> weather}} 

答えて

1

をフォルダ以下のようにコードを変更してください:

<div class="weatherWidget"> 
{{#each partials.weatherData.locations}} 
<div class="location"> 
    <h3>{{name}}</h3> 
    <a href="{{forecastUrl}}"> 
     <img src="{{iconUrl}}" alt="{{weather}}"> 
     {{weather}}, {{temp}} 
    </a> 
</div> 
{{/each}} 
<small>Source: <a href="http://www.wunderground.com">Weather Underground</a></small> 

をいくつかの旧式の部品やミスでは残念ながらあります。素晴らしいWebノードとエクスプレスによる開発

正誤表についてはこちらをご覧ください:https://github.com/EthanRBrown/web-development-with-node-and-express/issues/28

:あなたは持っている問題の http://www.oreilly.com/catalog/errata.csp?isbn=0636920032977 そして、ここを