我正在使用Express NodeJS和mysql构建rest api。使用GET
和req.params.value
并使用URL参数传递值完全没有问题。
现在,我正在尝试使用POST
将一些数据插入数据库。使用POSTMAN可以做到这一点,因为显然您可以设置要使用的BODY变量。但这在我的应用程序中突然出现,我将无法使用POSTMAN来执行此操作。我的问题(可能很愚蠢)是如何将这些BODY变量传递给api?我是否仍将它们作为参数传递给url?如果是这样,我会使用req.body.value
还是req.params.value
?这是我的POST
代码:
// Add new record
router.post('/editablerecords/add', function (req, res) {
let qb_TxnID = req.body.txnid
let type = req.body.type;
let margin = req.body.margin;
if (!qb_TxnID || !type || !margin ) {
return res.status(400).send({ error:true, message: 'Please provide qb_TxnID, type, or margin' });
}
// res.send(qb_TxnID + ' ' + type + ' ' + margin);
connection.query("INSERT INTO pxeQuoteToClose SET ? ", { 'qb_TxnID': qb_TxnID, 'type': type, 'margin': margin }, function (error, results, fields) {
if(error){
res.send(JSON.stringify({"status": 500, "error": error, "response": null}));
//If there is error, we send the error in the error section with 500 status
} else {
res.send(JSON.stringify({ error: false, data: results, message: 'New record has been created successfully.' }));
//If there is no error, all is good and response is 200OK.
}
});
});
答案 0 :(得分:0)
这取决于您如何通过XMLHttpRequest调用或通过表单发出请求,但是在这种情况下,绝对不会使用参数。根据您的要求,有以下三种将数据发送到您的API的选项,如果您需要,我建议使用最后一种。
1-您可以使用表单并将操作指向您的端点。在这种情况下,您将必须为x-www-form-urlencoded数据添加一个bodyParser中间件到您的快速应用程序中。如果您使用body-parser
库,那么它就和app.use(bodyParser.urlencoded([options]))
一样简单。数据将在req.body
中可用。
2-您可以在URL中发送所有数据,但可以在查询字符串中发送所有数据,而不是参数。例如:https://yourapi.com/editablerecords/add?qb_TxnID=data_id&type=data_type&margin=data_margin
。然后,所有数据将在req.query
对象中可用。无需添加任何解析器。
3-最后但并非最不重要的一点,我建议您使用XMLHttpRequest将数据作为json主体发送。为了帮助您,您可以使用axios
或fecth
之类的库,但是原理保持不变:您将数据对象设置为主体,然后在api的req.body
上检索它。看到您的代码,我确实假设您正在使用主体解析器,但是如果不是这样,则应该使用app.use(bodyParser.json())
添加中间件。
希望我能回答您的问题,对您有帮助。