Marvin
07/07/2022, 7:46 PMcontext.request
compared to a Suitlet or RESTlet script?
Here is an example:
I am getting the cart items and sending it to the backend as an object. Usually as a POST I would catch by doing JSON.parse(request.body)
.
cartComponent.getLines()
.then((lines) => {
this.model
.fetch({
type: "post",
data: {
action: "updateOrder",
session: this.session,
lines: lines
}
})
.done(response => {
console.debug({ response: response });
})
.catch(reason => {
console.error({ title: "ERROR_UPDATING_ORDER", reason: reason });
});
});
I have tried logging request in the backend and both aren't well structured.
I have tried logging the body.
function doPost(context) {
log.debug({
title: "doPost body audit",
details: {
body: context.request.body
}
});
log.debug({
title: "doPost body JSON audit",
details: {
body: JSON.parse(context.request.body)
}
}); // fails with error SyntaxError: Unexpected token:
}
This is essentially what I get.
{"body":"action=updateOrder&session%5Borderid%5D=2550927&session%5Btranid%5D=SO76470&session%5Bshipdate%5D=7%2F5%2F2022&session%5Bmode%5D=editorder&lines%5B0%5D%5Bextras%5D%5Brate_formatted%5D=%240.00&lines%5B0%5D%5Bextras%5D%5Btax_rate1%5D=&lines%5B0%5D%5Bextras%5D%5Btax_type1%5D=&lines%5B0%5D%5Bextras%5D%5Btax_rate2%5D=&lines%5B0%5D%5Bextras%5D%5Btax_type2%5D=&lines%5B0%5D%5Bextras%5D%5Btax1_amount%5D=&lines%5B0%5D%5Bextras%5D%5Btax1_amount_formatted%5D=%240.00&lines%5B0%5D%5Bextras%5D%5Bdiscount%5D=0&lines%5B0%5D%5Bextras%5D%5Bpromotion_discount%5D=&lines%5B0%5D%5Bextras%5D%5Btotal%5D=0&lines%5B0%5D%5Bextras%5D%5Bfree_gift%5D=false&lines%5B0%5D%5Bextras%5D%5Bamount_formatted%5D=%240.00&lines%5B0%5D%5Bextras%5D%5Btax_amount_formatted%5D=%240.00&lines%5B0%5D%5Bextras%5D%5Bdiscount_formatted%5D=%240.00&lines%5B0%5D%5Bextras%5D%5Btotal_formatted%5D=%240.00&lines%5B0%5D%5Binternalid%5D=item8518set165186&lines%5B0%5D%5Bquantity%5D=2&lines%5B0%5D%5Brate%5D=0&lines%5B0%5D%5Bamount%5D=0&lines%5B0%5D%5Bitem%5D%5Bextras%5D%5Bisinstock%5D=true&lines%5B0%5D%5Bitem%5D%5Bextras%5D%5Bweightunit%5D=...
I have tried logging the parameters.
function doPost(context) {
log.debug({
title: "doPost parameters audit",
details: {
parameters: context.request.parameters
}
});
}
This is what I get.
{"parameters":{"lines[1][item][extras][ispurchasable]":"true","lines[0][item][extras][onlinecustomerprice_detail][onlinecustomerprice_formatted]":"$0.00","lines[1][item][extras][saleunit]":"Case of 6","lines[0][item][extras][keyMapping_stock]":"quantityavailable","lines[1][item][extras][keyMapping_comparePriceAgainstFormated]":"$4.56","lines[0][item][extras][keyMapping_sku]":"800232","lines[0][item][extras][pricelevel6_formatted]":"$0.00","lines[0][item][extras][weightunit]":"lb","lines[1][item][extras][keyMapping_id]":"internalid","session[orderid]":"2550927","lines[1][item][extras][storedisplayname2]":"100483","lines[0][item][extras][pricelevel1]":"0","lines[0][item][extras][keyMapping_pageTitle][]":"pagetitle","lines[1][rate]":"4.56","lines[0][item][extras][itemimages_detail][squash][altimagetext]":"","lines[0][item][extras][keyMapping_url]":"/product/8518","lines[1][item][extras][keyMapping_outOfStockMessage]":"","lines[0][item][isinactive]":"false","lines[1][item][itemtype]":"InvtPart","lines[1][extras][tax1_amount]":"","lines[1][extras][tax1_amount_formatted]":"$0.00","lines[0][item][extras][keyMapping_showInStockMessage]":"false","lines[0][item][displayname]":"...
How would you parse a POST request body that has a complex object?Chris
07/07/2022, 9:48 PMrequest.getParameter("xyz");
?Chris
07/07/2022, 10:07 PMMarvin
07/07/2022, 10:55 PMCannot find function getParameter in object http.ServerRequest
Chris
07/07/2022, 11:21 PMdata: { $.param({
action: "updateOrder",
session: this.session,
lines: lines })
Chris
07/07/2022, 11:23 PMMarvin
07/08/2022, 12:53 AMMarvin
07/08/2022, 1:07 AMdata: JSON.stringify({
action: "updateOrder",
session: this.session,
lines: lines })
Catch like this.
const params = JSON.parse(JSON.parse(context.request.body));
Chris
07/08/2022, 1:10 AMMarvin
07/08/2022, 1:11 AM