2012-04-02 35 views
1

我不打算使用其他模块一样request,如何与http写这个,
我应该同时接种后考虑去浏览?“的node.js:扔é; // process.nextTick错误”,同时试图BROWSERID

错误:

$ 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 
     ^
+0

可能会有用:https://github.com/tlrobinson/long-stack-traces – 2012-04-02 15:57:53

回答

1

望着http.request documentation,我们发现:

Options:

  • host: A domain name or IP address of the server to issue the request to. Defaults to 'localhost'.
  • hostname: To support url.parse() hostname is preferred over host
  • port: Port of remote server. Defaults to 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,因此如果您愿意,可以从选项中省略该端口。

+0

谢谢。现在看来。但后来我得到了另一个问题http://stackoverflow.com/questions/9286326/node-js-proxy-server-posts-to-http-server-and-dies-when-http-server-is-closed – jiyinyiyong 2012-04-02 16:28:09

+0

我'很高兴听到我的回答帮助。请考虑接受它,如果这是为了你的满意,为了未来的游客,为了你和我的业力善良! – 2012-04-02 16:32:58

+1

@jiyinyiyong:您需要为HTTPS请求使用“https.request”。可能与其他问题没有关系,但你会得到相同的错误信息。 – 2012-04-02 16:39:01