I have a simple Express API here. When the user submits the chain param I want to convert the parameter to an object. Depending on the input the object will have different values Right now I just have a bunch of if statements stacked
Is there a better practice solution to implement this as this is quite clunky?
app.get('/gettokens/:chain/:address', async(req, res) => {
const address = req.params.address;
let chain = req.params.chain;
if (chain == 'bsc') {
chain = {
moralis: 'bsc',
coingecko: 'binance-smart-chain'
}
}
if (chain == 'eth') {
chain = {
moralis: 'eth',
coingecko: 'ethereum'
}
}
if (chain == 'avax') {
chain = {
moralis: 'avalanche',
coingecko: 'avalanche'
}
}
if (chain == 'matic') {
chain = {
moralis: 'matic',
coingecko: 'polygon-pos'
}
}
CodePudding user response:
You can try using a constant object
const chainDef = {
bsc: {
moralis: ‘bsc’,
coingecko: ‘binance-smart-chain’
} ,
…
}
// you should validate `req.params.chain` before doing this
const chain = chainDef[req.params.chain]
Hope this helps!
CodePudding user response:
You can use some configuration object to handle it
like this
const config = {
bsc: {
moralis: 'bsc',
coingecko: 'binance-smart-chain'
},
eth: {
moralis: 'eth',
coingecko: 'ethereum'
},
avax: {
moralis: 'avalanche',
coingecko: 'avalanche'
},
matic: {
moralis: 'matic',
coingecko: 'polygon-pos'
}
}
const fallback = {
moralis: 'something',
coingecko: 'something'
}
const getChain = (key) => config[key] || fallback
console.log(getChain('matic'))
console.log(getChain('not defined'))
CodePudding user response:
You could define an object with all your different values and use the expected req.params.chain
as keys:
const ChainObjs = {
bsc: {
moralis: 'bsc',
coingecko: 'binance-smart-chain'
},
eth: {
moralis: 'eth',
coingecko: 'ethereum'
},
...
}
And then you can get the correct value like this
app.get('/gettokens/:chain/:address', async(req, res) => {
let chain = ChainObjs[req.params.chain]
})
CodePudding user response:
As david suggested, you can use a switch statement:
/*
app.get('/gettokens/:chain/:address', async(req, res) => {
const address = req.params.address;
let chain = splitChain(req.params.chain);
}
*/
function splitChain(value) {
let coingecko
switch (value) {
case 'bsc':
coingecko = 'binance-smart-chain'
break;
case 'eth':
coingecko = 'ethereum'
break;
case 'avax':
coingecko = 'avalanche'
break;
case 'matic':
coingecko = 'polygon-pos'
break;
default:
coingecko = null
break;
}
return {
moralis: value,
coingecko: coingecko
}
}
console.log(splitChain('bsc'))
console.log(splitChain('eth'))
console.log(splitChain('avax'))
console.log(splitChain('wrong-value'))