2015-01-22 11 views
16

Nella mia applicazione, il mio server Nodejs invia una risposta JSON. Ho trovato due modi per farlo, ma non sono sicuro di quali siano le differenze.Differenza tra response.setHeader e response.writeHead?

Un modo è

var json = JSON.stringify(result.rows); 
response.writeHead(200, {'content-type':'application/json', 'content-length':Buffer.byteLength(json)}); 
response.end(json); 

E il mio altro modo è

var json = JSON.stringify(result.rows); 
response.setHeader('Content-Type', 'application/json'); 
response.end(json); 

Entrambi i modi di lavoro e mi chiedo solo quale sia la differenza tra i due e quando devo utilizzare uno sopra l' altro.

+0

Documenti? http://nodejs.org/api/http.html#http_response_writehead_statuscode_reasonphrase_headers –

+1

Certo, ho letto i documenti. Ma le mie conoscenze sugli header di risposta sono limitate e volevo sapere principalmente quando dovrei usare un modo piuttosto che l'altro. – cYn

+1

Quando vuoi impostare una singola intestazione senza impostare statusCode usa 'setHeader', quando vuoi impostare statusCode e un gruppo di intestazioni (opzionalmente) usa' writeHead'. (c) Captain Obvious –

risposta

22

response.setHeader() consente di impostare solo un'intestazione singolare.

response.writeHead() vi permetterà di impostare praticamente tutto ciò che riguarda il capo di risposta tra cui codice di stato, il contenuto, e multipla intestazioni.

consideri l'API:

response.setHeader(name, value)

Imposta un singolo valore di intestazione per le intestazioni impliciti. Se questa intestazione esiste già nelle intestazioni da inviare, il suo valore verrà sostituito. Usa una serie di stringhe qui se hai bisogno di inviare più intestazioni con lo stesso nome.

var body = "hello world"; 
response.setHeader("Content-Length", body.length); 
response.setHeader("Content-Type", "text/plain"); 
response.setHeader("Set-Cookie", "type=ninja"); 
response.status(200); 

response.writeHead(statusCode, [reasonPhrase], [headers])

invia un'intestazione risposta alla richiesta. Il codice di stato è un codice di stato HTTP a 3 cifre , come 404. L'ultimo argomento, le intestazioni, sono le intestazioni di risposta . Opzionalmente si può dare un motivo di frase leggibile dall'uomo come secondo argomento.

var body = "hello world"; 
response.writeHead(200, { 
    "Content-Length": body.length, 
    "Content-Type": "text/plain", 
    "Set-Cookie": "type=ninja" 
}); 
+2

Questa risposta mi sta guidando nella direzione di capirlo un po 'di più. Grazie per questo. Come puoi vedere, entrambi i metodi sembrano quasi identici nel codice, causando così la mia confusione. Quindi non stavo proprio capendo perché avrei usato setHeader su writeHead se al livello base, entrambi stavano facendo la stessa cosa. – cYn

+0

res.statusCode = 200; not response.status (200); Testato in Node.js v5 – Bhaveshkumar

+0

@Bhaveshkumar Sto vedendo ['res.status()'] (http://expressjs.com/en/api.html#res.status) come valido e nella documentazione. – zero298