2016-07-28 1 views
1

Невозможно выяснить, как отредактировать мой json-файл после получения запроса POST от клиента в NodeJS.Получить запрос POST и отредактировать файл JSON NodeJS

Использование webix datatable. После того, как я обновить данные в таблице, он отправляет запрос POST с данными + работы, что было сделано (webix_operation = обновление/удаление/вставка), поэтому я думал, что я мог бы сделать что-то вроде этого:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended : true })); 

app.post("/Page2", function (req, res) { 
    var operation = req.body.webix_operation; 

    if (operation == 'update') { 
     fs.readFile("JSON/DB.json", "utf8", function (err, data) { 
      var allData = JSON.parse(data) 
      var userData = { 
       "id": req.body.id, 
       "data1": req.body.data1, 
       "data2": req.body.data2, 
       "data3": req.body.data3, 
      } 
      allData.push(userData); 
      var newData = JSON.stringify(allData); 
      fs.writeFile("JSON/DB.json", newData, "utf8"); 
      console.error(err.stack); 
     }) 
     res.send(); 
    } 
    else if (operation == 'insert') { 
    } 
    else if (operation == 'delete') { 

    } 
    else 
     console.log("This operation is not supported") 
}); 

Но это Безразлично» т работы.

Может кто-нибудь проверить код и, возможно, выяснить, что я сделал неправильно?

+0

Что бы вы подразумевали под "это не работает"? На первый взгляд я вижу, что вы выполнили операцию ** INSERT ** вместо обновления, как указано в * îf *. С другой стороны, если вы присоедините свой вывод консоли, было бы полезно помочь вам ... – bitifet

+1

Не должно быть вашего утверждения 'allData.push (userData);' вместо 'allData.push (newData);' –

+0

@ bitifet, «он не работает», я имею в виду, что когда запрос POST принимается, он ничего не делает. Не редактирует/не перезаписывает json-файл. Поэтому я предполагаю, что я сделал что-то не так, или я ничего не понимаю. – MarkL

ответ

1
app.post("/Page2", function (req, res, next) { 
    var operation = req.body.webix_operation; 

    if (['insert', 'update', 'delete'].indexOf(operation) == -1) 
     return next(new Error('Bad request')); 

    // More better use http post to insert, put to update, delete to delete 
    // e.g. app.put('/page2', func) to update 

    var userData = { 
     id: req.body.id, 
     data1: req.body.data1, 
     data2: req.body.data2, 
     data3: req.body.data3 
    } 

    if (!userData.id) 
     return next(new Error('id is not set')); 

    fs.readFile("JSON/DB.json", "utf8", function (err, data) { 
     if (err)  
      return next(err); 

     var allData; 
     try { 
      allData = JSON.parse(data); 
     } catch(err) { 
      return next(err); 
     } 

     // find index of element in allData 
     var i = allData.reduce(function(iRes, e, iCurr) { 
      return (e.id == userData.id) ? iCurr : iRes 
     }, -1); 

     if (i == -1 && (operation == 'update' || operation == 'delete')) 
      return next(new Error(operation + ': Bad id')); 


     if (operation == 'update') 
      allData[i] = userData; 

     if (operation == 'delete') 
      allData.splice(i, 1); 

     if (operation == 'insert') 
      allData.push(userData); 

     fs.writeFile("JSON/DB.json", JSON.stringify(allData), 'utf8', function (err) { 
      if (err) 
       return next(err); 

      res.end(); 
     })  
    }); // end of readFile 
}); 
... 
app.use(function(err, req, res, next)) { 
    console.log(req.url, err); 
    res.end(err.message); 
} 
Смежные вопросы