nodejs http post请求抛出TypeError

我试图做一个简单的服务器,使用谷歌oauth(没有明确和passportjs,因为我想研究数据交换)。

当我的程序试图发送一个post请求到google时,nodejs抛出:

http.js:593 throw new TypeError('first argument must be a string or Buffer'); 

我已经检查并确保查询和选项中的所有参数都是string,但错误仍然存​​在。 我在这里错过了什么?

这是我的代码:

 // Load the http module to create an http server. var http = require('http'); var url = require('url'); var fs = require('fs'); var querystring = require('querystring'); var content; fs.readFile('./test.html',function(err,data){ content = data; }); // Configure our HTTP server to respond with Hello World to all requests. var server = http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/html"}); var path = url.parse(request.url).pathname; var query = querystring.parse(url.parse(request.url).query); var code; if (query!=null) { code = query.code; }; if ('/auth/google/callback'==path){ var data = querystring.stringify({ 'code': ''+code, 'client_id': 'id', 'client_secret': 'secret', 'redirect_uri': 'http://localhost:8999/auth/google/code/callback', 'grant_type': 'authorization_code' }); var options = { hostname: 'accounts.google.com', port:'80', path: '/o/oauth2/token', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': ''+data.length } }; debugger; var post = http.request(options, function(res){ response.write(res); response.end(); }); debugger; post.write(data); debugger; post.end(); } else if (path=='/auth/google/code/callback'){ console.log(request.headers); console.log(request.url); } else response.end(content); console.log(request.headers); console.log(request.url); }); // Listen on port 8000, IP defaults to 127.0.0.1 server.listen(8999); // Put a friendly message on the terminal console.log("Server running at http://127.0.0.1:8000/"); 

非常感谢,

我想问题是当你说的时候

 response.write(res); //it needs a string 

我认为res是这里的一个对象。

尝试

 response.write(JSON.stringify(res)); 

当你写回应或请求。 它应该包含string,所以你需要改变它

 response.write(querystring.stringify(res)); 

要么

 response.write(JSON.stringify(res));