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