我正在开发一个REST API,其中包含一个POST方法来创建新的小部件。 我需要发送的数据如下所示:
key | value
widgetnum | 12345
02:00:00_03:00:00_mtwrfsn | johndoe@myemail.com
12:00:00_15:00:00_mt | janedoe@yahoo.com
到目前为止,我一直通过BODY中的两个键发布数据:
widgetnum : 12345
tc : 02:00:00_03:00:00_mtwrfsn_johndoe@myemail.com,12:00:00_15:00:00_mt_janedoe@yahoo.com
正如您在上面的示例中所看到的,键“tc”实际上包含两个记录的信息,只是用逗号分隔。 但昨天我在Postman应用程序中探索......我意识到我可以发送多个键/值对。我不知道为什么以前从未点击过。 (这样的菜鸟)无论如何,我现在意识到,我实际上可以做到这一点:
widgetnum : 12345
02:00:00_03:00:00_mtwrfsn : johndoe@myemail.com
12:00:00_15:00:00_mt : janedoe@yahoo.com
问题
就我的javascript代码而言,更改POST数据的方式是否更有效?例如,今天,我的代码如下所示:
router.post('/', function(req, res, next) {
var widgetnum = req.body.widgetnum;
var tc = req.body.tc;
var tc_array = tc.split(",");
aka - 我能够使用非常具体的密钥名称查找我的数据。
但是,如果我更改发布数据的方式,我相信我必须循环才能找到所有密钥 所以像这样:
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 :(得分:0)
要发送和接收键/值对,格式已经存在(几乎)为您完成工作。其中之一是JSON,它得到了广泛的支持,特别是在JavaScript中。
由于您已经使用express,您可以添加body-parser
并将其设置为自动解析JSON:
发送数据(POSTMan:正文类型:application / json,复制粘贴在正文中。
{
"widgetnum" : 12345,
"tc" : {
"02:00:00_03:00:00_mtwrfsn": johndoe@myemail.com,
"12:00:00_15:00:00_mt": janedoe@yahoo.com
}
}
服务器代码:
"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将是与发送的JSON相同形式的JS对象,因此您可以执行以下操作:
console.log(req.body.tc['02:00:00_03:00:00_mtwrfsn']); //print johndoe@myemail.com
console.log(Object.keys(req.body.tc)); //Print ['02:00:00_03:00:00_mtwrfsn', '12:00:00_15:00:00_mt']