2017-02-19 4 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'は何ですか?ここでの可能性の1つは、あなたが正しいIDを渡していないので、一致を見つけることがないということです。また、 'employees'配列は検索しているだけで変更するべきではありません。これにより、次に検索したいときにデータが破損します。 – jfriend00

答えて

1

従業員オブジェクトを再割り当てしています。

employees = filteredEmployee; 

は、あなたの従業員オブジェクトを単一の見つかった従業員に設定します。それでは、初めて動作します。それ以降は、その中に従業員が1人しかいないと試みます。

あなたのループの後に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

関連する問題