2017-02-19 17 views
0

我正在處理一個示例,我試圖從此快速示例中獲得單個員工實例,但是當鍵入localhost:3000/1時,我得到一個空數組。有人知道我在這裏做錯了嗎?在快速響應中獲取空數組

'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

什麼是'req.params.EmployeeID'當你嘗試了嗎?這裏的一個可能性是你沒有傳入正確的ID,所以你永遠找不到匹配。另外,你不應該因爲你正在搜索而改變'employees'數組。這會在下次要搜索時損壞數據。 – jfriend00

回答

1

您正在重新分配您的員工對象。

employees = filteredEmployee; 

將設置您的員工對象爲單個找到的員工。所以這將是第一次,而且確實如此。然後任何後續嘗試它將只有一個員工在其中。

你只想在循環後做res.send(filteredEmployee)

此外,您的代碼將您的瀏覽器請求作爲員工參數提取到/favicon.ico

增加,這將阻止:

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

固定例如:

'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

謝謝卡羅,那工作。 – Lucky500

2

你真的不應該在查詢操作變異數據。你可以這樣做:

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

謝謝Balazs,我試圖讓這個工作,但不知道,我在這裏做錯了什麼。我可以在ES5中將數組設置爲常量嗎?或者那只是一個佔位符? – Lucky500

+0

不在es5中,對不起,'const'自帶es6 –

1

你實際上是在改變你的數據。你所做的工作只會進行一次,然後你的員工數組將會改變。因此,只需刪除employees = filteredEmployee;並直接發送res.send(filteredEmployee);

+0

爲什麼這個問題會解決? – jfriend00