require("http").request(options, cb)的一些研究
由于决定用couthDB做我的默认数据库,于是用到http.request,但请求死活发不出去
定位到1144行
// require("http").request(options, cb) function ClientRequest(options, cb) { var self = this ; OutgoingMessage.call(self); self.agent = options.agent === undefined ? globalAgent : options.agent; //是否使用代理 var defaultPort = options.defaultPort || 80; var port = options.port || defaultPort; var host = options.hostname || options.host || 'localhost' ; if (options.setHost === undefined) { var setHost = true ; } self.socketPath = options.socketPath; var method = self.method = (options.method || 'GET' ).toUpperCase(); self.path = options.path || '/' ; if (cb) { self.once( 'response' , cb); } if (!Array.isArray(options.headers)) { if (options.headers) { var keys = Object.keys(options.headers); for ( var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; self.setHeader(key, options.headers[key]); } } if (host && ! this .getHeader( 'host' ) && setHost) { var hostHeader = host; if (port && +port !== defaultPort) { hostHeader += ':' + port; } this .setHeader( 'Host' , hostHeader); } } if (options.auth && ! this .getHeader( 'Authorization' )) { //basic auth this .setHeader( 'Authorization' , 'Basic ' + new Buffer(options.auth).toString( 'base64' )); } if (method === 'GET' || method === 'HEAD' || method === 'CONNECT' ) { self.useChunkedEncodingByDefault = false ; } else { self.useChunkedEncodingByDefault = true ; } if (Array.isArray(options.headers)) { self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n' , options.headers); } else if (self.getHeader( 'expect' )) { self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n' , self._renderHeaders()); } if (self.socketPath) { self._last = true ; self.shouldKeepAlive = false ; if (options.createConnection) { self.onSocket(options.createConnection(self.socketPath)); } else { self.onSocket(net.createConnection(self.socketPath)); } } else if (self.agent) { // If there is an agent we should default to Connection:keep-alive. self._last = false ; self.shouldKeepAlive = true ; self.agent.addRequest(self, host, port, options.localAddress); } else { // No agent, default to Connection:close. self._last = true ; self.shouldKeepAlive = false ; if (options.createConnection) { options.port = port; options.host = host; var conn = options.createConnection(options); } else { var conn = net.createConnection({ port: port, host: host, localAddress: options.localAddress }); } self.onSocket(conn); } self._deferToConnect( null , null , function () { self._flush(); self = null ; }); } util.inherits(ClientRequest, OutgoingMessage); exports.ClientRequest = ClientRequest; |
没有结果,这只是一个类,继续
exports.request = function (options, cb) { if ( typeof options === 'string' ) { options = url.parse(options); } if (options.protocol && options.protocol !== 'http:' ) { throw new Error( 'Protocol:' + options.protocol + ' not supported.' ); } return new ClientRequest(options, cb); }; exports.get = function (options, cb) { var req = exports.request(options, cb); req.end(); return req; }; |
发现http.get比http.request唯一要多做的是加了个req.end(),崩溃!
另,此回调果真只有一个参数,即http.createServer(function(req, res) {})的第二个参数一样!
我们只要加个end就可以让程序运行了!(要先安装与启到couthDB)
var http = require( 'http' ); var options = { port: 5984, method: 'GET' }; //这个回调果真只有一个参数,即http.createServer(function(req, res) {}) var req = http.request(options, function (res) { console.log( 'STATUS: ' + res.statusCode); console.log( 'HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding( 'utf8' ); var body = "" res.on( 'data' , function (chunk) { body += chunk }); res.once( "end" , function (){ var json = JSON.parse(body); console.log(json) }) }); req.end() req.on( 'error' , function (e) { console.log( 'problem with request: ' + e.message); }); |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2009-08-24 javascript 鼠标事件总结
2009-08-24 javascript命名空间的简单实现