当前位置:   article > 正文

模块化中module.exports对于路由和中间件模块的导出挂载误区(TypeError:app.use() requires a middleware function)

app.use() requires a middleware function

module.exports常规的挂载方式

在这里插入图片描述
这样可以将js模块文件中特定的数据和方法向外导出

但是当在导出路由模块和中间件时,却出现了如下报错

报错时我的代码:
导出方式:module.exports.router1 = router
外部文件导入方式:const router = require(‘router模块路径’)
中间件注册挂载方式:app.use(router)

在这里插入图片描述
根据它提示的问题路径,我找到了导致报错的地方,原因是在express模块文件中,存在一个语句,它标明app.use()这个设置全局中间件的方法中不能导入一个中间件文件。

问题是:我以点语法挂载router对象到导出模块的对象空间中,在导出时使用的却是导出的模块对象,而不是挂在上去的那个router对象,这就导致了错误

解决办法

办法一、
在这里插入图片描述
改写一下挂载方式,不使用点语法,而是直接写module.exports = 函数名,这样就能让服务器正常运行了
办法二、
改一下引入方式,在原有的module.exports.router1 = router 点语法的导出基础上,外部其他文件导入该模块并挂在为中间件时,应该是
const router = require(‘router模块路径’)
app.use(router.router1)

之后就能如下正常运行了
在这里插入图片描述
总结:对于此问题,问题在于module.exports默认指向的是一个对象空间,所以可以往它上面通过点语法挂载属性和属性值,向外导出的时候,外部需要使用到的空间里面的属性,但是此处定义的router路由是一个对象,所以需要router.router1来调用其内需要被使用到的属性
而module.exports = router的方式则是直接替换的module.exports的指向空间,外部文件require导入获取到的直接就是需要被使用到的router属性了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/748233
推荐阅读
相关标签
  

闽ICP备14008679号