# node js listener argument must be a function ###### tags: `nodejs` `apigee` `http request` 我是用下面的方式處理掉的。 網路資料: 錯誤:“ listener”參數必須為Function類型。收到,錯誤:“ listener”參數必須為Function類型。收到類型對象#1239。關閉。caub於2018年10月9日發布此問題·8條評論。關閉接收到的類型對象”執行命令“ vscodeExtTest.testRequestWithoutIssue”,這表明不將URL作為第一個參數傳遞給https.request()即可使代碼正常工作。 var reqZip = https.request(url,options,... 改為 var reqZip = https.request(options,... 並調整options的內容。就行了。 ## 完整程式 ``` var http = require('http'); var https = require('https'); var result; const data = JSON.stringify({'address': '新北市永和區永貞路1號'}); // 用于请求的选项 var options = { hostname: 'c4-tw-nonprod-uat.apigee.net', path: '/api/v1/postOffice/postGetZipCode', method: 'POST', headers: { 'content-Type': 'application/json' } }; var url='https://c4-tw-nonprod-uat.apigee.net/api/v1/postOffice/postGetZipCode'; var svr = http.createServer(function (req, resp) { console.log(req.method, req.url); // 向服务端发送请求 new Promise((resolve, reject) => { console.log('A'); var reqZip = https.request(options, function (response) { console.log('B'); // 不断更新数据 var body = ''; response.on('data', function (data) { body += data; console.log('C'); }); response.on('end', function () { // 数据接收完成 result = JSON.parse(body); console.log('D'); resolve(); }); } ); reqZip.write(data); reqZip.end(); console.log("3", result); }).then(resolve => { console.log("1", result); resp.setHeader("Content-Type", "application/json"); resp.end(JSON.stringify({ date: new Date(), msg: result })); }).catch((error)=>{ console.error(error); }); console.log("4", result); }); svr.listen(process.env.PORT || 3000, function () { console.log('Node HTTP server is listening'); }); ```