首页 > 解决方案 > Route.post() 需要一个回调函数但得到一个 [object Undefined] 但它返回一个函数

问题描述

我知道这个问题已经被发布了好几次,而且总是一个基本的错误,我已经遇到了这个问题,而且一直是已经发布的问题的错误。

这就像我以这种方式制作的第 6 台服务器,这次我不知道为什么它认为这不是一个功能。

这是控制台上显示的错误

错误发生在这里

const router = require('express').Router();

module.exports = (api) => {

   router.post('/',
       api.middlewares.ensureAuthenticated,
       api.middlewares.bodyParser.json(),
       api.middlewares.agentDispenser.createMyAgent,
       api.actions.hub);

   return router;
}

当我评论

api.middlewares.agentDispenser.createMyAgent

它不会崩溃

我的中间件索引看起来像这样

module.exports = (api) => {
    api.middlewares = {
        bodyParser: require('body-parser'),
        ensureAuthenticated: require('./ensureAuthenticated'),
        agentDispenser: require('./agentDispenser')
    };
};

和 agentDispenser 看起来像这样

const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
var agent;

module.exports = (api) => {

    function createMyAgent(req, res, next) {
        agent = new WebhookClient({ req, res })
        return next()
    }

    function getMyAgent() {
        return agent
    }

    return {
        createMyAgent,
        getMyAgent
    }
}

正如我所说,我在许多项目中使用相同的语法/结构,并且它有效,所以我真的不知道问题是什么,我已经阅读了很多关于此的主题,很多关于被遗忘的返回或丢失(api )...但在这里我不知道

提前感谢您的帮助

编辑:真丢脸……

标签: node.jsexpress

解决方案


api.middlewares.agentDispenser.createMyAgentundefined因为api.middlewares.agentDispenser是一个接受api并返回中间件命名空间的函数,而不是命名空间本身。

我猜你想要类似的东西

module.exports = (api) => {
    api.middlewares = {
        bodyParser: require('body-parser'),
        ensureAuthenticated: require('./ensureAuthenticated'),
        agentDispenser: require('./agentDispenser')(api),
    };
};

推荐阅读