2016-06-27 10 views
0

Ich habe einen node.js Server bekam Daten aus einer Datei user.jsonnode.js - get-Methode mit 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 Empfang:

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

Wie Sie sehen, Die get-Anforderung zeigt alle Benutzer in den route/listUsers an. Jetzt möchte ich sie nach ID löschen einen bestimmten Benutzer löschen.

URL sollte wie folgt aussehen:/Listusers/id

Aber wie ich zu dieser sehr neu bin, ich weiß acutally nicht, wie es zu tun.

Meine Gedanken sind, dass ich zuerst die ganze Datei lesen und dann irgendwie die ID in die URL setzen muss. Aber wie kann ich das tun? Wird die Anfrage nicht VOR der Ausführung der Funktion gesendet? So wenn ich etw wie folgt aus:

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

Es wird nicht funktionieren. Ich möchte eigentlich keine mongoDB oder so etwas verwenden, ich möchte, dass dies nur mit dem nodejs-Server zu Testzwecken funktioniert, wenn möglich. Irgendwelche Gedanken/Vorschläge?

Antwort

3

Die app.get Methode hat einen Trick für Sie. Die Routenzeichenfolge enthält möglicherweise Parameter, denen ein Doppelpunkt vorangestellt ist. Diese werden in das Objekt gelegt.

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 }))) 
    } 
} 

I verwendet lodash den angegebenen Benutzer in der users.json Datei zu vereinfachen suchen.

+0

Ich habe versucht Ihren Code und ich verstehe, was es tut, aber alles, was ich sehen kann, ist eine leere Seite. – Faigjaz

+0

Kann das JSON-Format ein Problem sein? Lodash ist für Arrays, oder? Also, muss ich JSON.parse() für Daten verwenden, um die Suchmethode tatsächlich ausführen zu können? – Faigjaz

+0

Meine schlechte ... In der Tat ruft die ReadFile Sie mit einer Zeichenfolge, so dass Sie es als JSON zuerst analysieren müssen. Bearbeitete die Antwort. – wigy