“node.js:throw e; // process.nextTick错误“,同时尝试浏览

我不打算使用其他模块如request ,如何用http写这个,
播种到浏览器时应该考虑什么?

错误:

 $ coffee server.coffee info - socket.io started to send to write end? node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: getaddrinfo ENOENT at errnoException (dns.js:31:11) at Object.onanswer [as oncomplete] (dns.js:140:16) 

资源:

 ll = console.log fs = require 'fs' page = fs.readFileSync 'page.html', 'utf-8' query = require 'querystring' client = fs.readFileSync 'client.coffee', 'utf-8' page = page.replace '@@@', client handler = (req, res) -> res.writeHead 200, 'Content-Type': 'text/html' res.end page http = require 'http' app = http.createServer handler app.listen 8000 io = (require 'socket.io').listen app io.set 'log level', 1 io.sockets.on 'connection', (socket) -> socket.emit 'ready', 'go' socket.on 'assertion', (data) -> msg = query.stringify assertion: data audience: 'localhost:8000' options = host: 'https://browserid.org' path: '/verify' method: 'POST' headers: 'Content-Type': 'application/x-www-form-urlencoded' 'Content-Length': msg.length ll 'to send' request = http.request options, (response) -> str = '' ll 'prepare' response.on 'data', (chunk) -> str += chunk ll str response.on 'end', -> ll str request.write msg ll 'to write' request.end() ll 'end?' 

与长堆栈痕迹:

 $ coffee server.coffee info - socket.io started to send to write end? Uncaught Error: getaddrinfo ENOENT at errnoException (dns.js:31:11) at Object.onanswer [as oncomplete] (dns.js:140:16) ---------------------------------------- at EventEmitter.on at Array.<anonymous> (http.js:1147:12) at EventEmitter._tickCallback (node.js:192:40) ---------------------------------------- at EventEmitter.nextTick at ClientRequest.onSocket (http.js:1115:11) at Agent.addRequest (http.js:938:9) at new ClientRequest (http.js:1068:16) at Object.request (http.js:1331:10) at Socket.<anonymous> (/home/chen/code/home/git/docview/learning/coffee/browserid/server.coffee:52:22) at Socket.$emit (events.js:67:17) at SocketNamespace.handlePacket (/usr/lib/nodejs/socket.io/lib/namespace.js:335:22) ---------------------------------------- at EventEmitter.on at SocketNamespace.<anonymous> (/home/chen/code/home/git/docview/learning/coffee/browserid/server.coffee:37:19) at SocketNamespace.$emit (events.js:88:20) at connect (/usr/lib/nodejs/socket.io/lib/namespace.js:292:10) at /usr/lib/nodejs/socket.io/lib/namespace.js:308:13 at SocketNamespace.authorize (/usr/lib/nodejs/socket.io/lib/namespace.js:252:5) at SocketNamespace.handlePacket (/usr/lib/nodejs/socket.io/lib/namespace.js:302:14) at Manager.handleClient (/usr/lib/nodejs/socket.io/lib/manager.js:669:30) ---------------------------------------- at EventEmitter.on at Object.<anonymous> (/home/chen/code/home/git/docview/learning/coffee/browserid/server.coffee:35:14) at Object.<anonymous> (/home/chen/code/home/git/docview/learning/coffee/browserid/server.coffee:71:4) at Module._compile (module.js:441:26) at Object.run (/usr/lib/nodejs/coffee-script/lib/coffee-script/coffee-script.js:68:25) at /usr/lib/nodejs/coffee-script/lib/coffee-script/command.js:135:29 at /usr/lib/nodejs/coffee-script/lib/coffee-script/command.js:110:18 at [object Object].<anonymous> (fs.js:115:5) at [object Object].emit (events.js:64:17) Uncaught undefined node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ 

看一下http.request文档 ,我们发现:

选项:

  • 主机:发出请求的服务器的域名或IP地址。 默认为'localhost'。
  • 主机名:支持url.parse()主机名比主机更受欢迎
  • 端口:远程服务器的端口。 默认为80。

您可以尝试这些选项:

 options = hostname: 'browserid.org' port: 443 path: '/verify' method: 'POST' headers: 'Content-Type': 'application/x-www-form-urlencoded' 'Content-Length': msg.length 

编辑: http.request不适用于SSL请求,为此,您需要使用https.request 。 更改为可修复您的其他错误,并且默认端口为443,所以如果您愿意,可以从选项中省略。