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));