Saturday, May 2, 2020

InvalidParameterType: Expected params.MessageBody to be a string



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' }


Thanks for reading . Let me know your thoughts in the comments below    .

No comments:

Post a Comment

ec2-user@ec2 Permission denied