2015-11-20 23 views
5

È possibile utilizzare Node.js ed express per eliminare una richiesta per un determinato percorso? OSSIA non restituire uno stato http o eventuali intestazioni? Mi piacerebbe solo chiudere la connessione.Richiesta di rilascio in node.js express

app.get('/drop', function(req, res) { 
    //how to drop the request here 
}); 
+1

Non sono sicuro, chiedo solo. Non 'restituisce;' produce il risultato desiderato? Sembra logico - semplicemente non fare nulla con la risposta. –

+0

Non credo che il ritorno lascerà cadere la richiesta del client, continua a essere sospeso. – Justin

+0

Per eliminare la connessione, dovresti essere in grado di ['.destroy()'] (https://nodejs.org/api/net.html#net_socket_destroy) il ['.socket'] (https: // nodejs. org/api/http.html # http_message_socket) utilizzato dalla richiesta - 'req.socket.destroy()'. Questo emula una "disconnessione" piuttosto che un "timeout", come hai menzionato in altri commenti. Se si desidera prolungare indefinitamente la richiesta sul server, lasciando che il client scelga il timeout, quindi 'return;' o solo un gestore di route vuoto dovrebbe funzionare correttamente. –

risposta

-1

Sì, è possibile. Tutto ciò che devi fare è chiamare il metodo res.end passando facoltativamente il codice di stato.

Utilizzare uno dei seguenti metodi:

res.end(); 
res.status(404).end(); 

Se si volesse impostare anche le intestazioni, allora devi usare il metodo res.set. Vedi sotto

res.set('Content-Type', 'text/plain'); 

res.set({ 
    'Content-Type': 'text/plain', 
    'Content-Length': '123', 
    'ETag': '12345' 
}) 

Per i dettagli Date un'occhiata qui http://expressjs.com/api.html

+0

Non voglio restituire un codice di stato, ma voglio abbandonare completamente la richiesta. OSSIA simula il timeout http. – Justin

+0

Restituisce il codice di stato 408, che è uno stato di timeout. Quando chiami res.end, stai terminando l'elaborazione della richiesta. – Don

0

Si potrebbe fare questo, ovunque si desidera chiudere la connessione: res.end()