2016-07-03 19 views
0

Ich folge einem kopflosen Drupal-Tutorial unter http://blog.openlucius.com/en/blog/headless-drupal-nodejs-part-33-express-js-and-drupal-api-integration, aber meine Erfahrung ist mit der Drupal-Seite und nicht mit der Node-Seite, also jetzt ist etwas kaputt, ich weiß nicht, wie Fix.Nodejs Anfrage - Ich kann die Eigenschaft 'forEach' von undefined nicht lesen

Wenn Sie die App starten bekomme ich einen Fehler:

/Library/WebServer/Documents/uno-fe/hellotest.js:23 
blogsdata_all.blogs.forEach(function(item){ 
       ^

TypeError: Cannot read property 'forEach' of undefined 
    at Request._callback (/Library/WebServer/Documents/uno-fe/hellotest.js:23:24) 
    at Request.self.callback (/Library/WebServer/Documents/uno-fe/node_modules/request/request.js:200:22) 
    at emitTwo (events.js:87:13) 
    at Request.emit (events.js:172:7) 
    at Request.<anonymous> (/Library/WebServer/Documents/uno-fe/node_modules/request/request.js:1067:10) 
    at emitOne (events.js:82:20) 
    at Request.emit (events.js:169:7) 
    at IncomingMessage.<anonymous> (/Library/WebServer/Documents/uno-fe/node_modules/request/request.js:988:12) 
at emitNone (events.js:72:20) 
at IncomingMessage.emit (events.js:166:7) 

meine hellotest.js wie folgt aussieht:

var express = require('express'); 
var app = express(); 
var routes = require('./routes/index'); 
var request = require('request'); 
var blogsurlall = "http://www.pickingorganic.org/blogsexportall"; 

app.set('view engine','ejs'); 

var server = app.listen (2000, function(){ 
    console.log('Waiting for you on port 2000'); 
}); 

request({ 
    url:blogsurlall, 
    json:true 
}, function(error, response, body){ 
    if (!error && response.statusCode===200) { 
     blogsdata_all = body; 
    } 

    var blogs = []; 

blogsdata_all.blogs.forEach(function(item){ 
    blogs = blogs.concat(item); 
}); 

    app.locals.blogsdata = blogs; 
}) 

app.use('/', routes); 

Ich gehe davon aus das etwas ist, mit der Knotenanforderung zu tun, nicht dem Abrufen Json von der 'Quelle' Website richtig, weshalb Blogs var ist leer. Nicht sicher, was schief geht, tho - jede Hilfe sehr geschätzt!

+0

Überprüfen Sie "Fehler" und Antwortcode. Natürlich gibt es ein Problem beim Abrufen von Daten –

Antwort

2

Sie sollten console.log den Antworttext, um zu sehen, wie es aussieht. Ist es leer?

Soweit ich sehen, die URL korrekt ist und die Antwort ist:

[{"title":"second post","created":"2016-06-30T15:49:17+08:00","field_blog_image":" \n\n","path":"\/node\/2","created_1":"30 2016 Jun","body_1":"some content","body":"some content","uid":"","user_picture":""},{"title":"first post","created":"2016-06-28T21:56:52+08:00","field_blog_image":" \n\n","path":"\/node\/1","created_1":"28 2016 Jun","body_1":"woot","body":"woot","uid":"","user_picture":""}] 

Wenn ja, sollten Sie Ihre forEach auf diese Weise tun:

blogsdata_all.forEach(function(item){ 
    blogs.push(item); 
}); 

weil der Antworttext ein ist Array von Objekten. Die Art und Weise Sie eine Schleife durch sie versuchen, richtig wäre, wenn die Antwort so sein würde:

{"blogs":[{"title":"second post","created":"2016-06-30T15:49:17+08:00","field_blog_image":" \n\n","path":"\/node\/2","created_1":"30 2016 Jun","body_1":"some content","body":"some content","uid":"","user_picture":""},{"title":"first post","created":"2016-06-28T21:56:52+08:00","field_blog_image":" \n\n","path":"\/node\/1","created_1":"28 2016 Jun","body_1":"woot","body":"woot","uid":"","user_picture":""}] } 

Auch Sie haben nicht eine Schleife durch sie die Blog-Posts in ein neues Array zurück zu drängen, Sie kann direkt verwenden:

app.locals.blogsdata = blogsdata_all; 
+0

vielen Dank! Als richtige Antwort markiert –

+0

Gern geschehen;) –

+0

Thnx. das hilft mir, für mein Projekt fixiere ich das mit '' 'Age_groups: any = [];' '' – George