2016-10-21 4 views
0

Я работаю над REST API, который включает метод POST для создания новых виджетов. Данные, которые мне нужно отправить выглядит так:отправка данных ключа/значения через метод POST в API REST

key       |   value 
widgetnum      |   12345 
02:00:00_03:00:00_mtwrfsn  |   [email protected] 
12:00:00_15:00:00_mt   |   [email protected] 

До сих пор, я не отправлял данные с помощью двух ключей в ТЕЛЕ:

widgetnum : 12345 
tc : 02:00:00_03:00:[email protected],12:00:00_15:00:[email protected] 

Как вы можете видеть в приведенном выше примере , ключ «tc» фактически содержит информацию для двух записей, просто разделенных запятой. Но вчера, когда я заглядывал в приложение Postman ... Я понял, что могу отправить несколько пар ключ/значение. Я не знаю, почему это никогда не щелкало раньше. (Такой нуб) В любом случае, теперь я понимаю, что я могу на самом деле это сделать:

widgetnum : 12345 
02:00:00_03:00:00_mtwrfsn : [email protected] 
12:00:00_15:00:00_mt : [email protected] 

Вопросы

Это более эффективно изменить способ, которым я POST данные, насколько мой Javascript код обеспокоен? Так, например, сегодня, мой код выглядит следующим образом:

router.post('/', function(req, res, next) { 
     var widgetnum = req.body.widgetnum; 
     var tc = req.body.tc; 
     var tc_array = tc.split(","); 

он же - я могу смотреть на мои данные, используя очень специфические имена ключей.

Однако, если я изменю способ отправки POST своих данных, я считаю, что мне нужно будет петли, чтобы найти все ключи.
Так что-то вроде этого:

router.post('/', function(req, res, next) { 
     //loop through req.body object. 
     for (var key in req.body) { 
       if (req.body.hasOwnProperty(key)) { 
         // add some logic here to test if the key is 
         // widgetnum or a tc type key. 
         console.log(key + " -> " + req.body[key]); 
       } 
     } 
     res.status(200).send('ok'); 
     return; 
}); 

Я прошу прощения, если это похоже на процессуальный вопрос - это возможно. Но если это плохая форма для POST нескольких записей tc в одной паре ключ/значение, я рад ее изменить. Возможно, есть более эффективный способ написать мой код javascript для поиска данных.

Спасибо.

+0

Почему бы не использовать обозначенный формат ключа/значения, такой как JSON? Он широко поддерживается, а на стороне node.js, поскольку вы используете экспресс, он так же прост, как 'const bodyParser = require ('body-parser); app.use (bodyParser.json()); ' – DrakaSAN

+0

спасибо за предоставление более подробной информации. Я буду google bodyParser.json и, возможно, найду примеры как для отправки данных, так и для их анализа. – Happydevdays

+0

Вместо 'widgetnum: 12345 tc: 02: 00: 00_03: 00: 00_mtwrfsn_johndoe @ myemail.com, 12: 00: 00_15: 00: 00_mt_janedoe @ yahoo.com', отправьте '{ \t "widgetnum": 12345, \t "Т": \t { \t \t "02: 00: 00_03: 00: 00_mtwrfsn": [email protected], \t \t«12: 00: 00_15: 00: 00_mt ": [email protected] \t} }' – DrakaSAN

ответ

0

Чтобы отправить и получить пару ключ/значение, формат уже существует, что (почти) выполняет работу за вас. Одним из них является JSON, который широко поддерживается, особенно в JavaScript.

Поскольку вы используете экспресс уже, вы можете добавить body-parser и установить его для автоматического разбора JSON:

Передаваемые (Postman: Тип корпуса:. Применение/JSON, скопировать пасту в теле

{ 
    "widgetnum" : 12345, 
    "tc" : { 
     "02:00:00_03:00:00_mtwrfsn": [email protected], 
     "12:00:00_15:00:00_mt": [email protected] 
    } 
} 
код

Сервер:

"use strict"; 

const express = require('express'), 
    router = express.Router(), 
    bodyParser = require('body-parser'); 

router.use(bodyParser.json()); 

router.post('/', function(req, res, next) { 
    var widgetnum = req.body.widgetnum; 
    var tc = req.body.tc; 
    //No more need for tc_array 
    //... 
} 

Больше нет необходимости в пользовательском формате, и req.body будет объект JS той же формы, как послал JSON, так что вы можете сделать такие как:

console.log(req.body.tc['02:00:00_03:00:00_mtwrfsn']); //print [email protected] 
console.log(Object.keys(req.body.tc)); //Print ['02:00:00_03:00:00_mtwrfsn', '12:00:00_15:00:00_mt'] 
+0

Это намного чище. Благодаря! – Happydevdays

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