开发Node.js NPM模块时出现callback不是函数的报错如何解决
问题根因
你代码的报错完全是调用写法的语法错误导致的:
你当前的调用代码是:
ot.GetScript("75535"), function(response) { console.log(response) }
这里括号的位置写错了,逗号在GetScript的调用括号外面,相当于你只给GetScript传了script_id一个参数,第二个callback参数直接被漏掉了,等于你传给_sendGetRequest的callback是undefined,调用的时候自然会报callback not a function。
正确的调用写法应该是把回调函数放在调用括号里:
ot.GetScript("75535", function(response) { console.log(response) })
其他需要修复的代码问题
除了调用语法错误,你封装的请求逻辑还有几个隐藏问题需要修复:
- 逻辑判断运算符错误:你判断请求成功的条件里用的是
&位运算符,不是&&逻辑与运算符,会导致判断逻辑不符合预期 - 没有处理错误场景:当前只有请求成功、状态码200的时候才调用callback,请求报错或者状态码异常的情况完全没有回调触发,上层调用方无法感知错误
- 没有做callback合法性校验:建议调用callback前先判断是不是函数类型,避免参数传错时直接抛错
优化后的_sendGetRequest参考代码:
_sendGetRequest(endpoint, callback) { console.log("GET METHOD") const options = { url: `${baseUri}/${endpoint}`, headers: { 'X-Api-Id': `${this.apiId}`, 'X-Api-Secret': `${this.apiSecret}`, 'X-Api-Key': `${this.apiKey}`, "Content-Type": "application/x-www-form-urlencoded", }, }; request.get(options, function(error, response, body) { // 先判断callback是否是函数,避免报错 if (typeof callback !== 'function') return if (!error && response.statusCode === 200) { var result = JSON.stringify(JSON.parse(body)); return callback(result, false); } else { // 错误场景也要回调 return callback(null, error || new Error(`请求异常,状态码:${response?.statusCode}`)) } }) }
内容的提问来源于stack exchange,提问作者lula
相关产品推荐
相关产品推荐

