Me gustaría escribir un servidor HTTP que responda para solicitar el uso de un método HTTP no estándar (verbo). Por ejemplo, el cliente haría una solicitud como FOO/HTTP/.1.1
. Y en el lado del servidor, esta solicitud sería manejada por algo como: Sirviendo un método HTTP no estándar con ExpressJS
var express = require('express');
var app = express.createServer();
app.configure(function(){
app.use(express.logger({ format: ':method :url' }));
app.use(express.methodOverride());
});
app.foo('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
I adjuntas mi método no estándar a la matriz exportados en ExpressJS de lib/router/methods.js
. Esto me permite escribir el código de mi servidor como se esperaba. Cuando se usa express.methodOverride()
y una solicitud POST
con _method=foo
, funciona. Pero una solicitud real FOO
no funciona. Tan pronto como el cliente envíe la primera línea de la solicitud de la conexión se cierra por el servidor:
$telnet localhost 3000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
FOO/HTTP/1.1
Connection closed by foreign host.
Me gustaría ser capaz de implementar esto con ExpressJS y sin evitar la intrusión en su archivo central.
¿Alguna idea si esto es posible y cómo?
Solo para publicar una actualización: en las versiones del nodo actual (4.6) y express (4), puede manejar verbos HTTP personalizados. Escuchar 'app.all' y luego verificar' req.method' en la devolución de llamada funciona. – MatsLindh