# 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');
});
```