提问者:小点点

Express param未定义,即使我在url中输入值


我有这个endpoint

app.get('/getSongsByRadio/:from/:to/:radioid', (res, req) => {
(async() => {
    try {
        let sql = `SELECT playback.songid, song.name AS songName, author.name AS authorName, radio.name AS radioName, playback.playbackdatetime 
        FROM playback 
        INNER JOIN song ON playback.songid = song.id 
        INNER JOIN author ON song.authorid = author.id 
        INNER JOIN radio ON playback.radioid = radio.id 
        WHERE playbackdatetime BETWEEN $1 AND $2 AND radio.id = $3;`

        let values = [req.params.from, req.params.to, req.params.radioid]
        const result = await (conn.query(sql, values))
        
        console.log(result.rows)
        res.send(result.rows)
    } catch (err) { 
        console.error(err)
        throw(err)
    }
})()

})我正在尝试访问此endpoint,如下所示

http://localhost:3000/getSongsByRadio/1597310460/1597310460/1

但是,即使我输入了所有三个参数,在控制台中仍会出现以下错误:

TypeError: Cannot read property 'from' of undefined
at /Users/lukasmac/code/radiaNemecko/nemeckoRadia/index.js:65:38
at /Users/lukasmac/code/radiaNemecko/nemeckoRadia/index.js:73:7
at Layer.handle [as handle_request] (/Users/lukasmac/code/radiaNemecko/nemeckoRadia/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/lukasmac/code/radiaNemecko/nemeckoRadia/node_modules/express/lib/router/route.js:137:13)

谢谢你的帮助


共2个答案

匿名用户

所以您没有正确地编写它,您可以像这样在main函数中使用async。

app.get('/getSongsByRadio/:from/:to/:radioid', async (res, req) => {
    try {
        let sql = `SELECT playback.songid, song.name AS songName, author.name AS authorName, radio.name AS radioName, playback.playbackdatetime 
        FROM playback 
        INNER JOIN song ON playback.songid = song.id 
        INNER JOIN author ON song.authorid = author.id 
        INNER JOIN radio ON playback.radioid = radio.id 
        WHERE playbackdatetime BETWEEN $1 AND $2 AND radio.id = $3;`

        let values = [req.params.from, req.params.to, req.params.radioid]
        const result = await (conn.query(sql, values))
        
        console.log(result.rows)
        res.send(result.rows)
    } catch (err) { 
        console.error(err)
        throw(err)
    }
})

匿名用户

我认为您错误地交换了res,req。它应该是(req,res)

你也应该像这样重写你的方法

app.get('/getSongsByRadio/:from/:to/:radioid', async (req, res) => {
  try {
        let sql = `SELECT playback.songid, song.name AS songName, author.name AS authorName, radio.name AS radioName, playback.playbackdatetime 
        FROM playback 
        INNER JOIN song ON playback.songid = song.id 
        INNER JOIN author ON song.authorid = author.id 
        INNER JOIN radio ON playback.radioid = radio.id 
        WHERE playbackdatetime BETWEEN $1 AND $2 AND radio.id = $3;`

        let values = [req.params.from, req.params.to, req.params.radioid]
        const result = await (conn.query(sql, values))
        
        console.log(result.rows)
        res.send(result.rows)
    } catch (err) { 
        console.error(err)
        throw(err)
    }
})