即使我在url

问题描述

我有这个端点

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)
    }
})()

}) 我正在尝试像这样访问此端点

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)

感谢您的帮助

解决方法

我认为您错误地交换了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)
    }
})
,

因此,您编写的代码不正确,您只能像这样对主要功能使用异步。

app.get('/getSongsByRadio/:from/:to/:radioid',async (res,req) => {
    try {
        let sql = `SELECT playback.songid,values))
        
        console.log(result.rows)
        res.send(result.rows)
    } catch (err) { 
        console.error(err)
        throw(err)
    }
})