2016-06-27 4 views
0

とメソッドを取得し、私はuser.jsonファイルからのデータを受信Node.jsのサーバーを持っているのNode.jsは - ID

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:

{ "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 
    } 
] 
} 

ご覧のとおり、 get要求は、route/listUsers上のすべてのユーザーを表示します。 今私は特定のユーザーを削除するIDによってそれらを取得したい。

URLは次のようになります/ listUsers/ID

しかし、私はこれまで非常に新しいんだと、私はacutallyどのように行うのか分かりません。

私は最初にファイル全体を読んで、何らかの形でIDをURLに設定する必要があると考えています。 どうすればいいですか? 機能を実行する前に要求が送信されていませんか? だから私はこのようにsthを行うとき:

app.get('/listUsers/{this.id}'. function(req,res){ 
fs.readFile(_dirname + "/" + "users.json", "utf8", function(err, data) { 
res.end(data) 
id = this.data.id 
}} 

それは動作しません。 私は実際にmongoDBなどを使いたくないので、可能であれば、これをnodejsサーバだけでテストしたいと思っています。 ご意見/ご提案はありますか?

答えて

3

app.getメソッドはあなたのためのトリックです。ルート文字列には、コロンで始まるパラメータが含まれている場合があります。これらはreq.paramsオブジェクトに入れられます。

var _ = require('lodash'); 

app.get('/user/:id', function(req, res) { 
    fs.readFile(_dirname + "/" + "users.json", "utf8", function(err, data) { 
    var allUsers = JSON.parse(data).data; 
    res.end(JSON.stringify(_.find(allUsers, function(o) { return o.id == req.params.id }))) 
    } 
} 

私はusers.jsonファイルで指定されたユーザーを検索簡素化するためにlodashを使用。

+0

私はあなたのコードを試しましたが、私はそれが何を理解しますが、私が見ることができるのは空のページです。 – Faigjaz

+0

JSON形式が問題になるかもしれませんか? Lodashは配列用ですね。では、実際にfindメソッドを実行できるようにするためにJSON.parse()をデータに使用する必要がありますか? – Faigjaz

+0

私の悪い...実際には、readFileはあなたに文字列を呼び出すので、まずJSONとして解析する必要があります。答えを編集しました。 – wigy