Route.post () требует функцию обратного вызова, но получил [объект Undefined], но он возвращает функцию - PullRequest
0 голосов
/ 25 сентября 2018

Я знаю, что вопрос был опубликован несколько раз, и всегда это основная ошибка, у меня уже была эта проблема, и всегда это была ошибка, вроде уже опубликованного вопроса.

Это как 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) ... но здесь я не знаю

Спасибо за вашу помощь заранее

РЕДАКТИРОВАТЬ: позор мне ...

1 Ответ

0 голосов
/ 25 сентября 2018

api.middlewares.agentDispenser.createMyAgent - это undefined, потому что api.middlewares.agentDispenser - это функция, которая принимает api и возвращает ваше пространство имен промежуточного программного обеспечения, а не само пространство имен.

Я предполагаю, что вы хотите что-то вроде

module.exports = (api) => {
    api.middlewares = {
        bodyParser: require('body-parser'),
        ensureAuthenticated: require('./ensureAuthenticated'),
        agentDispenser: require('./agentDispenser')(api),
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...