Hasta ahora, el servidor que hicimos no tiene un uso práctico, por lo que comenzaremos a implementar algunas funciones prácticas y útiles.
Lo que debemos hacer es: el usuario selecciona un archivo, carga el archivo y luego ve el archivo cargado en el navegador.
Primero necesitamos un TextAREA para que el usuario ingrese el contenido y luego lo envíe al servidor a través de una solicitud de publicación.
Agregamos código al controlador de eventos de inicio y modificamos SolicHandlers.js de la siguiente manera:
La copia del código es la siguiente:
Function Start (Respuesta) {
console.log (se llamó al controlador de solicitud 'Inicio'. ");
var Body = '<html>'+ '<head>'+
'<meta http-equiv = "content-type" content = "text/html;'+
'charset = utf-8 " />'+
'</head>'+
'<body>'+
'<Form Action = "/upload" Method = "Post">'+
'<Textarea name = "Text" Rows = "20" cols = "60"> </extarea>'+
'<input type = "enviar" valor = "enviar texto" />'+
'</form>'+
'</body>'+
'</html>';
Response.Writehead (200, {"Content-type": "Text/html"});
respuesta.write (cuerpo);
respuesta.end ();
}
Función cargada (respuesta) {
console.log ("Solicitar el controlador 'Subiendo' se llamó.");
Response.Writehead (200, {"Content-type": "Text/Plain"});
Response.write ("Hola, carga");
respuesta.end ();
}
exports.start = inicio;
exports.upload = cargar;
Puede ver el efecto visitando http: // localhost: 8888/inicio en su navegador.
A continuación, queremos implementar la activación del controlador de solicitud de /carga para manejar la solicitud de publicación cuando el usuario envíe el formulario.
Para que todo el proceso no sea bloqueado, Node.js dividirá los datos posteriores en muchos pequeños bloques de datos y luego pasará estos pequeños bloques de datos a la función de devolución de llamada activando eventos específicos. Los eventos específicos aquí incluyen un evento de datos (que indica que ha llegado un nuevo bloque de datos pequeño) y un evento final (que indica que se han recibido todos los datos).
Hacemos esto registrando un oyente en el objeto de solicitud. El objeto de solicitud aquí se pasa a la función de devolución de llamada OnRequest cada vez que se recibe una solicitud HTTP.
Ponemos el código en el servidor y modificamos server.js de la siguiente manera:
La copia del código es la siguiente:
var http = require ("http");
var url = require ("url");
Function Start (Route, Handle) {
function OnRequest (solicitud, respuesta) {
var postdata = "";
var rathName = url.Parse (request.url) .pathname;
console.log ("Solicitar" + PathName + "Recibido");
request.setEncoding ("UTF8");
request.addListener ("data", function (postdatachunk) {
Postdata += PostDatachunk;
console.log ("Recibido Post Data Chunk '" + Postdatachunk + "'.");
});
request.addListener ("end", function () {
ruta (manejo, ruta, nombre, respuesta, post -data);
});
}
http.createServer (OnRequest) .listen (8888);
console.log ("El servidor ha comenzado");
}
exports.start = inicio;
El código anterior hace tres cosas: primero, establecemos el formato de codificación de los datos recibidos en UTF-8, y luego registramos el Evento de "Datos" para recopilar nuevos bloques de datos cada vez y asignarlos a la variable posterior a los datos. Finalmente, movemos la llamada solicitando la ruta al controlador de eventos final para asegurarnos de que solo disparará cuando se reciban todos los datos y solo disparen una vez. También pasamos los datos post para solicitar rutas, porque el controlador de solicitudes utilizará estos datos.
A continuación, en la página /carga, muestre la entrada del usuario
Cambiemos en router.js:
La copia del código es la siguiente:
ruta de funciones (manejo, ruta, respuesta, postdata) {
console.log ("a punto de enrutar una solicitud para" + rathName);
if (typeof mango [pathname] === 'function') {
manejar [PathName] (respuesta, postdata);
} demás {
console.log ("No se encontró controlador de solicitud para" + PathName);
Response.Writehead (404, {"Content-type": "Text/Plain"});
respuesta.write ("404 no encontrado");
respuesta.end ();
}
}
exports.route = ruta;
Luego, en requesthandlers.js, incluimos los datos en la respuesta a la solicitud de carga:
La copia del código es la siguiente:
Function Start (Respuesta, PostData) {
console.log (se llamó al controlador de solicitud 'Inicio'. ");
var cuerpo = '<html>'+
'<head>'+
'<meta http-equiv = "content-type" content = "text/html;'+
'charset = utf-8 " />'+
'</head>'+
'<body>'+
'<Form Action = "/upload" Method = "Post">'+
'<Textarea name = "Text" Rows = "20" cols = "60"> </extarea>'+
'<input type = "enviar" valor = "enviar texto" />'+
'</form>'+
'</body>'+
'</html>';
Response.Writehead (200, {"Content-type": "Text/html"});
respuesta.write (cuerpo);
respuesta.end ();
}
Function upload (respuesta, postdata) {
console.log ("Solicitar el controlador 'Subiendo' se llamó.");
Response.Writehead (200, {"Content-type": "Text/Plain"});
Response.write ("Has enviado:" + postdata);
respuesta.end ();
}
exports.start = inicio;
exports.upload = cargar;
Lo último que tenemos que hacer es: actualmente pasamos todo el cuerpo del mensaje de la solicitud al controlador de rutas y solicitudes de solicitud. Solo debemos aprobar los datos posteriores, la parte que nos interesa, a los manejadores de enrutamiento y solicitud de solicitud. En nuestro ejemplo, lo que nos interesa es el campo de texto.
Podemos usar el módulo de QueryString introducido anteriormente para implementarlo:
La copia del código es la siguiente:
var QueryString = require ("QueryString");
Function Start (Respuesta, PostData) {
console.log (se llamó al controlador de solicitud 'Inicio'. ");
var cuerpo = '<html>'+
'<head>'+
'<meta http-equiv = "content-type" content = "text/html;'+
'charset = utf-8 " />'+
'</head>'+
'<body>'+
'<Form Action = "/upload" Method = "Post">'+
'<Textarea name = "Text" Rows = "20" cols = "60"> </extarea>'+
'<input type = "enviar" valor = "enviar texto" />'+
'</form>'+
'</body>'+
'</html>';
Response.Writehead (200, {"Content-type": "Text/html"});
respuesta.write (cuerpo);
respuesta.end ();
}
Function upload (respuesta, postdata) {
console.log ("Solicitar el controlador 'Subiendo' se llamó.");
Response.Writehead (200, {"Content-type": "Text/Plain"});
Response.write ("Has enviado el texto:"+ QueryString.Parse (postdata) .Text);
respuesta.end ();
}
exports.start = inicio;
exports.upload = cargar;
Ok, lo anterior se trata de procesar datos de publicación.
En la siguiente sección, implementaremos la función de cargar imágenes.