node.js - 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 )...但在这里我不知道
提前感谢您的帮助
编辑:真丢脸……
解决方案
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),
};
};
推荐阅读
- sql - SQL:从不同的表中选择
- javascript - Graphql shield 返回 Not Authorized for allowed mutation
- meson-build - 介子:错误:add_project_arguments 关键字参数“语言”未知语言:python
- github-actions - 什么时候应该在 github 操作中使用单花括号和双花括号作为变量引用?
- amazon-web-services - AWS Beanstalk 和 IPset
- python - 如何在 Tensorflow TextVectorization 上标准化 =“None”
- ruby-on-rails - 活动记录 - 按子属性排序父
- python - 如何在签名上创建边界框并忽略文本区域
- javascript - 当我尝试在当前位置导航时,如何强制 Vue Router 重新加载我的页面?
- python - Pulsar GoClient 等效于 unacked_messages_timeout_ms (py-client)