2016-03-22 16 views
-1

Ich habe NodeJS als Backend, das JSON-Daten von MySQL über localhost ausliefert: 3002/visit; Ich möchte Angular2 den JSON von meinem NodeJS greifen lassen. Das Problem ist, während meine Angular2 App JSON aus dem Online-JSON-API-Dienst vollkommen in Ordnung bringen kann, gibt es einen Fehler beim Abonnieren, wenn ich die URL GET auf localhost: 3002/visit umschalte.Angular2 kann keine Daten von NodeJS abrufen

NodeJS:

var mysql = require('mysql'); 
var express = require('express'); 

var app = express(); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'angela', 
    database : 'emergency', 
}); 

connection.connect(function(err){ 
if(!err) { 
    console.log("Database is connected ... nn");  
} else { 
    console.log("Error connecting database ... nn");  
} 
}); 

app.get('/patient',getAllFromPatient); 
app.get('/staff', getAllFromStaff); 
app.get('/visit', getAllFromVisit); 

function getAllFromPatient(req,res){ 
    connection.query('SELECT * from patient', function(err, rows, fields) { 
    if (!err) 
     res.send(rows); 
    else 
     console.log('Error while performing Query.'); 
});} 

function getAllFromStaff(req,res){ 
    connection.query('SELECT * from staff', function(err, rows, fields) { 
    if (!err) 
     res.send(rows); 
    else 
     console.log('Error while performing Query.'); 
});} 

function getAllFromVisit(req,res){ 
    connection.query('SELECT * from visit', function(err, rows, fields) { 
    if (!err){ 
     res.send(rows); 
     console.log("visit data sent"); 
     }else 
     console.log('Error while performing Query.'); 
});} 

app.listen(3002); 

Angular 2:

return this.http.get("http://localhost:3002/visit") 
.map(res => res.json()) 
.subscribe(
     data => this.msg = JSON.stringify(data), 
     err => alert(err), 
     () => console.log("complete") 
    ); 
+2

Können Sie den "Fehler" genauer beschreiben? – qqilihq

+0

Nur eine wilde Vermutung - haben Sie versucht, Response 'json()' Methode anstelle von 'send()'? – rrjohnson85

Antwort

1

Angular2 muss wissen, dass der empfangene Inhalt eine JSON ist. Daher muss in diesem Fall der Header Content-Type mit dem Wert application/json in den Antwortheadern vorhanden sein.

Um das zu tun, müssen Sie entweder auf:

  • manuell an die Content-Type Header:

    function getAllFromVisit(req,res){ 
        connection.query('SELECT * from visit', function(err, rows, fields) { 
        if (!err){ 
         res.setHeader("Content-Type", "application/json"); 
         res.send(rows); 
         console.log("visit data sent"); 
        }else 
         console.log('Error while performing Query.'); 
        }); 
    } 
    
  • Verwenden Sie die json Methode statt, die das gleiche tut:

    function getAllFromVisit(req,res){ 
        connection.query('SELECT * from visit', function(err, rows, fields) { 
        if (!err){ 
         res.json(rows); 
         console.log("visit data sent"); 
        }else 
         console.log('Error while performing Query.'); 
        }); 
    }