2016-04-13 7 views
2

Ich versuche, eine Nodejs-Anwendung mit Express-Framework mit Express-Lenker als Ansichts-Engine zu erstellen, blieb aber beim Versuch, den Fehler zu sehen, hängen Homepage:Rendern einer Teilansicht in Express 4.x-Framework mit Express-Lenker-View-Engine

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

kann mir jemand wissen lassen, was falsch hier gehen.

Link auf GitHub Repo: https://github.com/bdinesh/LearningNode.git

Im Folgenden finden Sie Code, den ich zu laufen bin versucht:

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 dies in platziert lib Ordner

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 (Teilansicht) Diese Datei befindet sich im Ordner Ansichten/Teilbilder.

<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 in Aussicht gestellt Ordner

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

Antwort

1

Bitte Ihren Code wie folgt ändern:

<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> 

Es gibt leider einige veraltete Teile und Fehler in erstaunlich Web Entwicklung mit Knoten und Express.

Bitte beachten Sie hierzu für Erratum: http://www.oreilly.com/catalog/errata.csp?isbn=0636920032977 Und hier für das Problem, das Sie haben: https://github.com/EthanRBrown/web-development-with-node-and-express/issues/28

Verwandte Themen