2 Stimmen

Verwendung von Javascript zum Aufruf eines expressjs restful webservice => Ergebnis immer leere Antwort

Zweck:
1) Erstellen Sie eine Website, die auf einem NodeJs-Webserver läuft. (expressjs, stylus, jade) + NodeJS
2) Erstellen Sie eine erholsame Webse (expressjs) + NodeJS
3) Die Website ruft eine Re (Javascript-Datei)


Mit dem Ubuntu-Terminal starte ich die nodeJs für die Website und eine andere für den Rest Testen des Restful Webservice (im Browser):

Url:localhost:1337/Weine/

Das Datenergebnis ist: [ { "Name": "Neuer Wein", "Jahr": "2012", "_id": "50e8255197f0b5260f000001" } ]

Testen der Website Url: localhost:3000/

Dies ist meine Javascript-Datei in der Website verwendet, hier möchte ich die aufrufen Rest url localhost:1337/wines/ und die Ergebnisdaten abrufen.

alert('hello!');  (popup)

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.onreadystatechange = function () {
  if (this.status == 200 && this.readyState == 4) {
    console.log('response: ' + this.responseText);
    alert("Yes");
  }
};
xhr.send();

In den Terminals sehe ich, dass der GET durchgeführt wird:
Restful Terminal:
GET /Weine/ 200 3ms - 93

Website-Terminal:
GET / 200 11ms
GET /JavaScript/script.js 304 1ms
GET /stylesheets/style.css 304 1ms

Wenn ich debugge, geht das so:
var xhr = new XMLHttpRequest(); OK
xhr.open('GET', 'http://localhost:1337/wines/'); OK
xhr.send(); OK

xhr.onreadystatechange = function () Sprung in Rückruf OK
aber 'readystate=4 but this.status = 0' und ich habe kein Ergebnis

Am Ende erhalte ich diesen Fehler:
Die Komponente hat einen Fehlercode zurückgegeben: 0x80004005 (NS_ERROR_FAILURE)


Ergebnisinformationen von Firebug (zur Fehlersuche in diesem Java-Skript verwendet)

Inhalt-Typ application/json; charset=utf-8
Datum Sun, 06 Jan 2013 04:15:07 GMT
X-Powered-By Express
Kopfzeilen anfordern
Akzeptiert text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Verbindung keep-alive
Rechner localhost:1337
Herkunft //localhost:3000
Referer //localhost:3000/
Benutzer-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101
Firefox/13.0.1


Ich habe bei Stack Overflow nachgeschaut und es könnte ein 'Cross Domain Issue' sein, daher sollte ich einige Javascript zu meinem restful Webservice hinzufügen:

var express = require('express'),
wine = require('./routes/wines');
var app = express();
app.configure(function () {
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());

//Added part
app.all('/', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "*");
  res.header("Access-Control-Allow-Methods", "XPOST, GET, OPTIONS");
  res.header("Access-Control-Max-Age", "1000");
  next();
 });
//Added part

});

app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
app.listen(1337);
console.log('Listening on port 1337...');

Immer noch kein Ergebnis, hat jemand eine Idee, wie man dieses Problem beheben kann? Vielen Dank

0voto

rounce Punkte 356

Sie müssen den Ereignishandler registrieren, bevor Sie open() .

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (this.status == 200 && this.readyState == 4) {
    console.log('response: ' + this.responseText);
    alert("Yes");

  }
};
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.send();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X