Variable out of scope (probably) - undefined

Cream

So this piece of code is returning description of word in json from https://sjp.pl/ webiste, word which user provied before in request json body

And problem is that i want to send back var 'desc' in res.send but its undefined. How I can access that and send it?

I think thats because item.push($(this).text()) is working only in this axios function and can be accessed only in this scope


const item = [];
var desc;

app.post('/test', (req, res) => {
    const { word } = req.body;

    if(!word) {
        res.status(418).send({error: 'no word provided'})
    }

    console.log(word)

    axios(`https://sjp.pl/${word}`).then(res => {

        const html = res.data
        const $ = cheerio.load(html)

        $('p').each(function() {
            item.push($(this).text())
        })

        desc = item[3]

        console.log(desc) // working until here
    })

    console.log(desc) // undefined here

    res.send({
        description: `${desc}`
    })
})
Karthik Nedunchezhiyan

Use res inside the axios like below. You are getting undefined because the desc scope ends inside that anonymous function. Moreover the axios is async. You may need to use await to make it sync or can follow the idea I proposed below.

const item = [];
var desc;

app.post('/test', (req, res0) => {
    const { word } = req.body;

    if(!word) {
        res0.status(418).send({error: 'no word provided'})
    }

    console.log(word)

    axios(`https://sjp.pl/${word}`).then(res => {

        const html = res.data
        const $ = cheerio.load(html)

        $('p').each(function() {
            item.push($(this).text())
        })

        desc = item[3]

        res0.send({
            description: `${desc}`
        })
    })
})

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related