500内部服务器错误Express + Axios

1tuwyuhd  于 2023-01-25  发布在  iOS
关注(0)|答案(2)|浏览(178)

当我发出一个获取请求时,我得到了一个500错误,但是当我只是返回一个值数组时,一切都很顺利,请告诉我。
我的server.js文件:

const express = require('express');
const cors = require("cors"); 
const CoinGecko = require("coingecko-api")
const app = express();

const CoinGeckoClient = new CoinGecko();
app.use(cors())
app.get('/coins',  (req, res) => {
        await axios.get<ICoin[]>(`https://api.coingecko.com/api/v3/coins/markets?`, {params: {
            vs_currency: "usd",  
            per_page: 100, 
            page: 1,  
         }})
        .then((response) => {
            console.log(response);
            res.json(response.data);
          }).catch((error) => {
            console.log(error);
        })
       
})

app.listen(5000, () => {
    console.log('Server listening on port 5000');
  });

我的获取请求:

export default class CoinsService {
static async getAll(page ) {
    let response: ICoin[] = []
    await axios.get('/coins').then(data => console.log(data)
    )
}
}

我尝试输出确切的错误,但得到相同的消息:enter image description hereenter image description here

niwlg2el

niwlg2el1#

1.正如@Vahid Alimohamadi评论中所说,如果您使用promise,则不需要await
1.最可能的错误来自于这一行:

await axios.get<ICoin[]>

此处您预期Response类型为ICoin[],但可能不是,请将其替换为

axios.get<any>

如果错误消失,则说明您已了解原因。

但这仅用于调试,请记住:

不建议使用any类型

rdlzhqv9

rdlzhqv92#

我解决了这个问题,是我的粗心。
我以前

app.get('/coins', async (req, res) => {
         CoinGeckoClient.coins.markets({
            vs_currency: 'usd',
            per_page: 100,
            page: page,
            sparkline: false
        }).then((response) => {
            res.json(response.data);
          }).catch((error) => {
            console.log(error);
        })

替换这个选项,我得到了数据。

app.get('/coins', async (req, res) => {
        await axios.get('https://api.coingecko.com/api/v3/coins/markets?', {
          params: {
                vs_currency: "usd", // Convert prices to USD
                per_page: 100, // Get top 100 coins
                page: 1, // Get first page
             }
        })
        .then((response) => {
            res.json(response.data);
          }).catch((error) => {
            console.log(error);
        })

我想知道为什么我不能使用第一个选项?

相关问题