TypeError [ERR_INVALID_CALLBACK]: Callback must be a function错误解决

       在《oAuth2实战》一书中,作者随书代码使用了node.js语言来描述。在oAuth中有4种角色:资源拥有者、客户端、授权服务器和受保护资源,资源拥有者就是人,所以每个场景练习都是三个组件,换成node.js即三个js文件,在三个窗口依次启动client.js、authorizationServer.js、protectedResource.js,当启动完以后,首先点击getOAuthToken,拿到令牌以后,点击getProtectedResource报错了,受保护资源端错误如下所示:

      client端错误如下所示:

       在网上搜索解决方案,说是代码中用的node.js版本与自己本地安装的node.js版本不一致,并且自己本地的node.js版本更新,新旧版本node.js在这个错误的区别主要在于fs这个库的api有变化,新版本的fs操作,函数中都要求有一个回调函数,而老版本中没有,这个库如下:

       具体到这个随书代码中,表现为代码中使用了nosql内存存储组件,而nosql组件中又操作了fs库,从报错中也可以看出是项目依赖node_modules\nosql\index.js 2388:8出了问题,再加上图一中错误第二行显示at Object.close,证明是在调用fs.close函数时因为缺少回调函数报的错,找到node_modules\nosql\index.js 2388:8,如下所示:

       在fs.close函数中加了回调函数以后,重新启动项目,getProtectedResource就正常返回了,所以这个错误有两种解决方式:一是降低node.js版本;二是向上面图中一样为报错的函数加一个回调函数。第二种方法的弊端就是每次编译完都得改,而且随书代码都是独立成章的,每导入一个章节的练习就得改一次,特麻烦。

       另外这本书联系过程中还有一个bug就是:代码中包含了正常情况下的返回,也包含了异常情况下的返回,但是异常情况下的返回忘了加end语句,导致响应一直阻塞,所以要改一下,如下所示:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值