NodeJS 遇到express中的“未处理的承诺拒绝”错误,catch()语句出现问题

ep6jt1vc  于 2022-12-22  发布在  Node.js
关注(0)|答案(1)|浏览(178)

我面临着一个错误'未经处理的承诺拒绝'当我运行此代码:'

app.get('/standings/:tableId', async (req, res) => {
    
  const tableId = req.params.tableId
  
  const tableAddress = tables.filter(table => table.id == tableId)[0].address
  const team_ID = tables.filter(table => table.id == tableId) [0].id
  
  const results = [];
  try {
    const result = await request.get(tableAddress);

    const $ = cheerio.load(result);

    $('#league-tables-wrapper > div > div.table-wrapper > table > tbody > tr').each((index, element) => {
     
        const tds = $(element).find("td");
        const rank = $(tds[0]).text();
        const team = $(tds[2]).text();
        const points = $(tds[10]).text();
        const tableRow = { rank, team, points };
        results.push({
            rank,
            team,
            points
        });
    });

  } catch (error) {
    res.json(error);
  }
    
   res.json(results)
});

'
该错误指出,“无法从该列表中读取未定义的属性地址”:'

const tables = [
    {
        address: 'https://****/****/superliga',
        id: 'Albania',
        league: 'superliga'
    },
    {
        address: 'https://****/****/ligue-1',
        id: 'Algeria',
        league: 'ligue 1'
    },

'错误的恢复是:此错误源于在没有catch块的异步函数内部抛出,或者拒绝未使用.catch()处理的承诺但我已经有catch语句。
任何人可以告诉我什么是这问题与我的代码.我正在使用express,cheerio和request-promise

ivqmmu1c

ivqmmu1c1#

不过,我可以看到您的代码存在一些问题,以准确回答您的问题:你的try ... catch在那个上下文中是无用的。你实际上需要写的是:

app.get('/standings/:tableId')
   .then((req,res) => {your_whole_code_here})
   .catch(e => console.log(e));

如果你想你的异步错误被正确捕获。
还可以尝试对Id tables.filter(table => table.id === tableId)[0].address执行三重等式,并检查tableId是否与表Ids的格式相对应,因为在这种情况下,过滤器只返回一个空数组。

相关问题