kaazing / javascript.client

Apache License 2.0
21 stars 16 forks source link

Amqp-0-9-1.js doesn't allow empty string for exchange or routing key #12

Open ZachBray opened 9 years ago

ZachBray commented 9 years ago

Users of Amqp-0-9-1.js cannot use the default exchange or empty-string routing keys.

This is because the guards are too strict. For example in publishBasic(...):

if (!exchange || typeof exchange != 'string') {
    throw new Error("AmqpChannel.publishBasic(): String parameter \'exchange\' is required");
}
if (!routingKey || typeof routingKey != 'string') {
    throw new Error("AmqpChannel.publishBasic(): String parameter \'routingKey\' is required");
}

They are too strict because the empty-string '' is a falsy value in JavaScript (see: https://developer.mozilla.org/en-US/docs/Glossary/Falsy)

!'' === true

I would suggest changing guards, where the empty-string should be allowed, to something like the following:

if (exchange == null || exchange == undefined || typeof exchange != 'string') {
    throw new Error("AmqpChannel.publishBasic(): String parameter \'exchange\' is required");
}
if (routingKey == null || routingKey == undefined || typeof routingKey != 'string') {
    throw new Error("AmqpChannel.publishBasic(): String parameter \'routingKey\' is required");
}
ZachBray commented 9 years ago

BTW the guards are only applied when the configuration object style calling is used.