---
# System prepended metadata

title: node js listener argument must be a function
tags: [nodejs, http request, apigee]

---

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

```


