You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何正确调用getKeys()?解决undefined及await语法错误

如何正确调用Node.js中的getKeys()函数?

问题现象

  • 直接调用getKeys()时,控制台输出undefined
  • 使用await getKeys()调用时,抛出语法错误:

await getKeys();
^^^^^

SyntaxError: await is only valid in async function

原代码如下:

const express = require('express')
const axios = require('axios')
const app = express()

app.get("/", async(req, res) => {
    try {
        const response = await axios.get("https://m.myapp2go.de/services/APIgetblz")
        res.json(response.data)
    } catch (err) {
        console.log(err)
    }
})

async function getKeys() {
    try {
        const response = await axios.post('https://m.myapp2go.de/services/APIgetblz');
        const data = response.items;
        console.log(data);
        //res.send(data);
    } catch (e) {
        console.log(e.message);
    }
}

getKeys();

app.get('*', (req, res) => {
    res.status(500).json({ message: "error" })
})

app.listen(3001)

问题原因

  1. 输出undefined的核心原因:
    • 根路由用axios.get能成功获取数据,但getKeys里用了axios.post,如果该接口仅支持GET请求,会导致返回数据异常;
    • axios请求的返回数据存在于response.data中,而非response.items,错误的取值路径直接导致输出undefined。
  2. await报错的原因:
    • await关键字只能在async标记的函数内部使用,全局作用域不属于async函数,直接使用会触发语法错误。

解决方案

第一步:修复getKeys函数的逻辑

先修正接口请求方式和数据提取路径:

async function getKeys() {
    try {
        // 改用GET请求(和根路由一致,确保接口支持)
        const response = await axios.get('https://m.myapp2go.de/services/APIgetblz');
        // 正确提取接口返回的数据
        const data = response.data;
        console.log(data);
        return data; // 返回数据,方便后续调用时处理
    } catch (e) {
        console.error('获取数据失败:', e.message);
        throw e; // 抛出错误,让调用方可以捕获处理
    }
}

第二步:正确调用getKeys函数

有三种常用的正确调用方式:

方式1:通过Promise的.then()处理结果

在全局作用域直接调用,利用Promise链式回调处理数据和错误:

getKeys()
  .then(data => {
    console.log('成功获取数据:', data);
    // 这里可以添加数据处理逻辑
  })
  .catch(err => {
    console.error('调用getKeys失败:', err);
  });

方式2:用立即执行异步函数包裹await

创建一个异步的立即执行函数,在内部使用await:

(async () => {
  try {
    const data = await getKeys();
    console.log('成功获取数据:', data);
    // 处理数据逻辑
  } catch (err) {
    console.error('调用getKeys失败:', err);
  }
})();

方式3:在Express路由中调用

如果需要在接口路由里使用getKeys的结果,直接在async路由处理函数中使用await即可:

app.get('/get-keys', async (req, res) => {
  try {
    const data = await getKeys();
    res.json(data);
  } catch (err) {
    res.status(500).json({ message: '获取密钥数据失败' });
  }
});

内容的提问来源于stack exchange,提问作者Ralf Bordé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:25:27