Error Blog
This
blog is about the error InvalidParameterType: Expected params.MessageBody to be a string.
Problem Statement
unable to post data to AWS SQS using AWS Node.js SDK .
Error Details
error Log
ERROR DETAILS
{ InvalidParameterType: Expected params.MessageBody to be a string
at ParamValidator.fail (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:50:37)
at ParamValidator.validateType (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:232:10)
at ParamValidator.validateString (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:154:32)
at ParamValidator.validateScalar (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:130:21)
at ParamValidator.validateMember (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:94:21)
at ParamValidator.validateStructure (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:75:14)
at ParamValidator.validateMember (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:88:21)
at ParamValidator.validate (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\param_validator.js:34:10)
at Request.VALIDATE_PARAMETERS (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\event_listeners.js:126:42)
at Request.callListeners (F:\progvocab\repo\orders\node_modules\aws-sdk\lib\sequential_executor.js:106:20)
message: 'Expected params.MessageBody to be a string',
code: 'InvalidParameterType',
time: 2020-05-02T19:25:34.438Z }
null
Error Code
This error is due to the datatype of message is something other than string .
const aws = require('aws-sdk');
const config = require('./config.json');
(async function(){
try{
aws.config.setPromisesDependency();
aws.config.update( {
accessKeyId : config.accessKeyId,
secretAccessKey : config.secretAccessKey,
region :"us-east-2"
}
);
let sqs = new aws.SQS();
let msg = {"orderId":1 , "item":"Laptop","quantity":10};
let details = {
MessageBody : msg ,
QueueUrl : "https://sqs.us-east-2.amazonaws.com/320524107631/orders"
};
sqs.sendMessage(
details , function(err , data ){
console.log(err);
console.log(data);
}
);
}catch(e){
console.log(e);
}
}
)();
Solution
change the datatype of message and make it as a string .
Code Changes
Since the message was in JSON format , I have converted it to String .
const aws = require('aws-sdk');
const config = require('./config.json');
(async function(){
try{
aws.config.setPromisesDependency();
aws.config.update( {
accessKeyId : config.accessKeyId,
secretAccessKey : config.secretAccessKey,
region :"us-east-2"
}
);
let sqs = new aws.SQS();
let msg = {"orderId":1 , "item":"Laptop","quantity":10};
let details = {
MessageBody : JSON.stringify(msg) ,
QueueUrl : "https://sqs.us-east-2.amazonaws.com/320524107631/orders"
};
sqs.sendMessage(
details , function(err , data ){
console.log(err);
console.log(data);
}
);
}catch(e){
console.log(e);
}
}
)();
OUTPUT
null
{ ResponseMetadata: { RequestId: 'dc26fa07-6d82-599e-ad56-ad20a13a2cde' },
MD5OfMessageBody: 'bc33fad3d612e7283260076cc3a47167',
MessageId: '97312d2d-afe4-4184-9931-32fda4ef8178' }
{ ResponseMetadata: { RequestId: 'dc26fa07-6d82-599e-ad56-ad20a13a2cde' },
MD5OfMessageBody: 'bc33fad3d612e7283260076cc3a47167',
MessageId: '97312d2d-afe4-4184-9931-32fda4ef8178' }
Thanks for reading . Let me know your thoughts in the comments below .