2016-06-27 13 views
0

Ich habe 2 Server, 1 mit nodejs und einen anderen mit gulp-Webserver.node.js - Empfangen keine Daten mit Kreuzursprung

Der Server node.js verwendet eine Datei users.json und zeigt sie an.

var express  = require("express"); 
var app   = express(); 
var bodyParser = require("body-parser"); 
var router  = express.Router(); 
var cors  = require('cors') 
var fs   = require("fs"); 
app.use(cors()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({"extended" : false})); 

app.get('/listUsers', function (req, res) { 
    fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) { 
     console.log(data); 
     res.end(data); 
    }); 
}) 

var server = app.listen(8081, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 

}) 

user.json:

{ 
    "user1" : { 
     "name" : "mahesh", 
     "password" : "password1", 
     "profession" : "teacher", 
     "id": 1 
    }, 
    "user2" : { 
     "name" : "suresh", 
     "password" : "password2", 
     "profession" : "librarian", 
     "id": 2 
    }, 
    "user3" : { 
     "name" : "ramesh", 
     "password" : "password3", 
     "profession" : "clerk", 
     "id": 3 
    } 
} 

Jetzt möchte ich, dass die Daten nennen eine get-Methode verwendet, und speichern Sie es in eine Variable und dann ein primeng-Datentabelle mit angezeigt werden soll.

Deshalb habe ich eine data.service:

import { Injectable } from '@angular/core'; 
import { Headers, Http } from '@angular/http'; 
import { Data } from './data'; 
import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class DataService { 

    constructor(private http : Http) { 

    } 

    getData(){ 
    return this.http.get('http://localhost:8081/listUsers') 
       .toPromise() 
        .then(res => <Data[]> res.json().data) 
        .then(data => { return data; }); 

       ;} 
} 

ich dieses onInit In meinem datacomponent bin Aufruf:

import { Component } from '@angular/core'; 
import { Data } from './data'; 
import {DataTable} from 'primeng/primeng'; 
import {Column} from 'primeng/primeng'; 
import { Headers, Http } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 
import { DataService } from './data.service' 

@Component({ 
    selector: 'my-datatbl', 
    templateUrl: 'dist/data.component.html', 
    directives: [DataTable, Column], 
    providers: [DataService] 
}) 

export class DataComponent { 
datatbl: Data[]; 
    constructor(private dataservice : DataService) { 

    } 




    ngOnInit(){ 


    this.dataservice.getData().then(datatbl => this.datatbl = datatbl) 
    console.log(this.datatbl) 

consolelog zeigt nicht definiert.

Ich weiß nicht, was falsch ist, aber da ich ein absoluter Newbe bin, ist meine erste Frage: Ist das überhaupt möglich?

Dies ist nur für Testzwecke, wie ich in REST Apis bin. Ich möchte in diesem Stadium nicht mongodb oder irgendeinen anderen Datenbankservice verwenden, obwohl ich es tun könnte, wenn dies der einzige Weg wäre.

Antwort

0

Okay, ich habe es selbst gelöst. Das Problem war, dass meine Antwort auf eine .data-Eigenschaft meiner users.json, die offensichtlich nicht existiert, verwiesen. Also habe ich einfach meine users.json zu

{ "data": [ 
    { 
     "name" : "mahesh", 
     "password" : "password1", 
     "profession" : "teacher", 
     "id": 1 
    }, 
    { 
     "name" : "suresh", 
     "password" : "password2", 
     "profession" : "librarian", 
     "id": 2 
    }, 
    { 
     "name" : "ramesh", 
     "password" : "password3", 
     "profession" : "clerk", 
     "id": 3 
    } 
] 
} 

geändert und jetzt funktioniert alles gut.