当前位置: 首页 > 知识库问答 >
问题:

nodejs中的此方法返回未定义的对象

帅令雪
2023-03-14

我之前问过这个问题,它与这个问题相关(如何从异步调用返回响应?),但它并没有解决我的问题

我是node.js的新手,我遇到了一些我无法处理的错误,或者找不到任何我理解的帮助。我使用express generator初始化应用程序。我试图通过一个api调用将我得到的对象发送到前端。我编写了一个类“StockClass.js”,其中包含一个函数makeApiCall(),该函数进行调用并返回对象。但当我在路由器中调用该函数时,我得到了“未定义”。这是密码

//==== StockClass.js ===

const yahooFinance = require("yahoo-finance");
class stockClass {
    static makeApiCall(symbol) {
        yahooFinance.quote(
            {
                symbols: [symbol],
                modules: ["price", "summaryDetail"],
            },
            function (err, quotes) {
                if (err) { console.log(err) }
                console.log(quotes)
                return quotes;
            }
        );
    }
}

module.exports = stockClass;

//=====index.js======

const StockClass = require("../handlers/StockClass");

router.get("/new", function (req, res) {

   let quotes = StockClass.makeApiCall("AAPL");
   console.log(quotes);
   res.render('path', { quotes });
});

StockClass.js中的console.log正确记录对象(引号),而index.js中的console.log记录“未定义”。

下面的链接解释了yahoo finance api调用。https://www.npmjs.com/package/yahoo-finance

==========================================================================

我还尝试使用一个中间件并像这样将数据附加到响应对象

//==========middleware=========

const yahooFinance = require("yahoo-finance");

module.exports = {

    makeApiCall: (symbol) => {
        return function (req, res, next) {
            yahooFinance.quote(
                {
                    symbols: [symbol],
                    modules: ["price", "summaryDetail"],
                },
                function (err, quotes) {
                    if (err) { console.log(err) }
                    res.stockObj = quotes;
                    console.log(res.stockObj);
                }
            );
            next();
        }
    }
}

//======= index.js =========
const handler = require("./handlers/stockUtils");

    router.get("/new", handler.makeApiCall("AAPL"), function (req, res) {

       let quotes = res.stockObj;
       console.log(quotes);
       res.render('path', { quotes });
    });

结果是一样的。中间件函数中的console.log记录正确的对象,但index.js中的console.log记录未定义的对象

暂时还没有答案

 类似资料:
  • 我试图从React调用一个API,但它一直以未定义的方式返回。这是我的代码: 当我运行它时,console.log()返回未定义的,这意味着我得到的错误。我不太确定如何解决这个问题,所以任何帮助都将不胜感激!谢谢。 编辑:这是API在您转到以下链接时返回的内容:

  • 我正在尝试为discord bot执行命令,它从MySQL表中输出整数。 我尝试使用async/await、Promissions和回调来实现这一点,但结果总是一样的。在这里,我用promise再次尝试,因为在过去它不知何故起了作用。现在不会了。 下面是返回promise的函数: 下面的代码将结果赋值给Access Level变量: Catch函数捕获表示“TypeError:无法读取未定义的属性

  • 我正在尝试发送到客户端每当一个新的连接发出。 我的服务器端javascripts是: 和要处理的客户端js: 输出未定义(在未定义的情况下) 哪里不对劲了?

  • 我实现了一个函数,希望返回保存在某个url下的对象。在下面的代码中,第一个“console.log(result);”从firebase位置返回正确的对象。第二个返回未定义。有人能解释一下为什么以及如何修复它吗?

  • 问题内容: 基本上,我需要能够做到这一点: 我正在寻找一个等于 或{get}的“全局”对象,以便为所有未定义的属性获取器返回一个空字符串(请注意,这与的属性不同)。 问题答案: 您可以创建一个a,以在访问未定义的属性时返回空字符串。 : 正如问题作者David Murdoch指出的那样,如果您使用的是节点v0.6.18(撰写本文时是最新的稳定版本),则在运行脚本时必须传递该选项: 请注意,此解决方