2017-02-19 1 views
0

Ich arbeite an einem Beispiel, ich versuche, eine einzelne Mitarbeiter-Instanz von diesem ausdrücklichen Beispiel zu bekommen, aber wenn ich, localhost eingeben: 3000/1, bekomme ich ein leeres Array. Weiß jemand, was ich hier falsch mache?leer Array auf Express-Antwort

'use strict'; 
 

 
const express = require('express'); 
 
const app = express(); 
 

 
var employees = [ 
 
\t { 
 
    "EmployeeID" :1 , 
 
    "EmployeeName" : "RNA Team", 
 
    "Salary" : "200000", 
 
    "Address" : "Bangalore" 
 
    }, 
 
    { 
 
    "EmployeeID" :2 , 
 
    "EmployeeName" : "Mahesh Samabesh", 
 
    "Salary" : "100000", 
 
    "Address" : "Hydrabad" 
 
    }, 
 
    { 
 
    "EmployeeID" :3 , 
 
    "EmployeeName" : "Rui Figo", 
 
    "Salary" : "50000", 
 
    "Address" : "Dallas" 
 
    }, 
 
    { 
 
    "EmployeeID" :4 , 
 
    "EmployeeName" : "Indradev Jana", 
 
    "Salary" : "456789", 
 
    "Address" : "Los Angles" 
 
    }, 
 
    { 
 
    "EmployeeID" :5 , 
 
    "EmployeeName" : "Suresh Shailesh", 
 
    "Salary" : "1234567", 
 
    "Address" : "Patna" 
 
    } 
 
]; 
 

 
//Get the employees records 
 

 
app.get('/', function(req, res){ 
 
\t res.send(employees); 
 
}); 
 

 
//run the server 
 
var server = app.listen(3000, function(){ 
 
\t var host = server.address().address; 
 
\t var port = server.address().port; 
 

 
\t console.log('Server started and listening at:> http://%s:%s', host, port); 
 
}); 
 

 
//Get single employee record 
 
app.get('/:EmployeeID', function(req, res){ 
 
\t var employeeID = req.params.EmployeeID; 
 

 
\t //Get Employee Records whose EmployeeID = get the EmployeeID at runtime 
 
\t var filteredEmployee = []; 
 

 
\t for(var i=0; i < employees.length; i++){ 
 
\t \t if(employees[i].EmployeeID == employeeID){ 
 
\t \t \t filteredEmployee.push(employees[i]); 
 
\t \t } 
 
\t } //end Loop 
 
\t employees = filteredEmployee; 
 
\t console.log(filteredEmployee); 
 
\t res.send(employees); 
 
});

+0

Was ist 'req.params.EmployeeID', wenn Sie es versuchen? Eine Möglichkeit besteht darin, dass Sie nicht die richtige ID eingeben, so dass Sie nie eine Übereinstimmung finden. Außerdem sollten Sie das Array "employees" nicht ändern, nur weil Sie es suchen. Dadurch werden die Daten für die nächste Suche beschädigt. – jfriend00

Antwort

1

Sie ordnen Ihr Mitarbeiterobjekt neu zu.

employees = filteredEmployee; 

wird Ihr Mitarbeiter-Objekt als einziger gefundener Mitarbeiter festgelegt. Es wird also das erste Mal funktionieren, und das tut es auch. Bei jedem weiteren Versuch wird dann nur ein einziger Mitarbeiter dabei sein.

Sie möchten nur nach Ihrer Schleife res.send(filteredEmployee) tun.

Auch Ihr Code nimmt Ihre Browser-Anfrage an als Mitarbeiter param.

Zugabe dies, dass Block:

app.get('/favicon.ico', function(req, res) { 
    res.send(204); 
}); 

Fest Beispiel:

'use strict'; 

const express = require('express'); 
const app = express(); 

var employees = [ 
    { 
    "EmployeeID" :1 , 
    "EmployeeName" : "RNA Team", 
    "Salary" : "200000", 
    "Address" : "Bangalore" 
    }, 
    { 
    "EmployeeID" :2 , 
    "EmployeeName" : "Mahesh Samabesh", 
    "Salary" : "100000", 
    "Address" : "Hydrabad" 
    }, 
    { 
    "EmployeeID" :3 , 
    "EmployeeName" : "Rui Figo", 
    "Salary" : "50000", 
    "Address" : "Dallas" 
    }, 
    { 
    "EmployeeID" :4 , 
    "EmployeeName" : "Indradev Jana", 
    "Salary" : "456789", 
    "Address" : "Los Angles" 
    }, 
    { 
    "EmployeeID" :5 , 
    "EmployeeName" : "Suresh Shailesh", 
    "Salary" : "1234567", 
    "Address" : "Patna" 
    } 
]; 

//Get the employees records 

app.get('/', function(req, res){ 
    res.send(employees); 
}); 

//run the server 
var server = app.listen(3000, function(){ 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log('Server started and listening at:> http://%s:%s', host, port); 
}); 

app.get('/favicon.ico', function(req, res) { 
    res.send(204); 
}); 

//Get single employee record 
app.get('/:employeeID', function(req, res){ 
    var employeeID = req.params.employeeID; 

    //Get Employee Records whose EmployeeID = get the EmployeeID at runtime 
    var filteredEmployee = []; 

    for(var i=0; i < employees.length; i++){ 
     if(employees[i].EmployeeID == employeeID){ 
      filteredEmployee.push(employees[i]); 
     } 
    } //end Loop 
    console.log(filteredEmployee); 
    res.send(filteredEmployee); 
}); 
+0

Danke Carlo, das hat funktioniert. – Lucky500

2

Sie sollten wirklich nicht Ihre Daten in einer Abfrageoperation mutieren. Sie könnten so etwas tun:

app.get('/:EmployeeID', (req, res) => { 
    const employeeID = req.params.EmployeeID; 
    // filter the employees without mutating the array, and get the first result 
    const [employee] = employees.filter(e => e.EmployeeID === employeeID) 
    // if there was a result, send it, otherwise send an error 
    res.json(employee ? employee : { error: `Employee with id ${employeeID} not found` }) 
}); 
+0

Danke Balazs, ich habe versucht, das zur Arbeit zu bringen, aber ich bin mir nicht sicher, was ich hier falsch gemacht habe. Kann ich in ES5 ein Array als const festlegen? oder das ist nur ein Platzhalter? – Lucky500

+0

nicht in es5, sorry, 'const' kommt mit es6 –

1

Sie mutieren tatsächlich Ihre Daten. Die Art und Weise, wie Sie vorgehen, funktioniert nur einmal und dann ändert sich Ihr Mitarbeiter-Array. Entfernen Sie einfach employees = filteredEmployee; und senden Sie stattdessen direkt res.send(filteredEmployee);.

+0

Warum würde das etwas reparieren? – jfriend00