2016-06-27 2 views
0

У меня Node.js сервер получает данные из файла user.jsonNode.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 
    } 
] 
} 

Как вы видите, запрос получения отображает всех пользователей на маршруте/списке. Теперь я хочу получить их по ID, чтобы удалить определенного пользователя.

URL должен выглядеть следующим образом:/ListUsers/идентификатор

Но, как я новичок в этом, я 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 }))) 
    } 
} 

Я использовал lodash для упрощения поиска данного пользователя в файле users.json.

+0

Я пробовал свой код, и я понимаю, что он делает, но все, что я вижу, это пустая страница. – Faigjaz

+0

Возможно, проблема в формате JSON? Лодаш предназначен для массивов, не так ли? Итак, нужно ли использовать JSON.parse() для данных, чтобы на самом деле было возможно выполнить метод find? – Faigjaz

+0

My bad ... Действительно, readFile называет вас строкой, поэтому сначала нужно разобрать ее как JSON. Отредактировал ответ. – wigy

Смежные вопросы