1. Instalación
Primero, vaya a http://nodejs.org para descargar e instalar. La versión que estoy abajo es 0.8.14. La instalación es muy simple, el siguiente paso es el siguiente. Luego, configure el directorio de instalación en la ruta, y MSI instalará NPM (Node Package Manager) juntos.
Mi directorio de instalación es c:/archivos de programa (x86)/nodejs. En este momento, use el comando node -v y npm -v para ver la versión instalada en el comando npm -v
1.1. Hola Mundo
Cree un nuevo archivo hello.js en el directorio de proyectos node.js y escriba una línea de código en él
console.log ('hola, nodejs.');Ingrese la consola de línea de comando, ingrese el directorio de proyecto Node.js y el tipo de nodo Hello.js
La consola emite "Hola, NodeJs".
1.2. Versión web de Helloworld
Cree un nuevo http.js en el directorio de proyectos node.js, el código es el siguiente
var http = require ("http"); http.createServer (function (request, respuesta) {respuesta.writehead (200, {"tipo de contenido": "text/html"}); respuesta.write ("¡Hola mundo!"); Response.end ();}). Escuchar (8000);Inicie el servicio en la línea de comando y haga clic en Nodo http.js
Luego abra la barra de direcciones del navegador e ingrese http: // localhost: 8000/, ¡y mira Hello World! Salir en la página y tiene éxito.
La versión de Node.js debe sincronizarse con la API
El número de versión de node.js es regular, incluso la versión es una versión estable, la versión impar es una versión no estable
2 Análisis de código de Helloworld
Ok, comience a analizar nuestra línea de Helloworld a partir de ahora.
Introducir módulos
var http = require ("http");El método Requerir se utiliza para introducir un módulo, y el parámetro es el nombre del módulo. Por ejemplo, el módulo del sistema de archivos se puede introducir de la siguiente manera:
var fs = require ("fs");Podemos usar el método requerir () como un método global, pero de hecho es más como un método local que pertenece a un módulo determinado. Su documentación está aquí: https://nodejs.org/api/globals.html.
El método Requerir devuelve una instancia de un determinado módulo, como requirir ("http") devuelve una instancia http. La documentación de referencia para instancias http está aquí: https://nodejs.org/api/http.html.
Vemos que el módulo HTTP tiene un método CreateServer (), que involucra nuestra segunda línea de código.
Crear un servidor
El método createServer () del módulo HTTP acepta un método como parámetro, y el prototipo es:
http.createServer ([requestListener])
RequestListener es un método que se asociará con el evento de solicitud de la clase Http.Server. De esta manera, cuando llegue la solicitud del cliente, se llamará al Solicitude.
RequestListener tiene dos parámetros, y el prototipo de funciones es el siguiente:
función (solicitud, respuesta) {} El tipo de la primera solicitud de parámetros es http.IncomingMessage , que implementa la interfaz Readable Stream .
El tipo del segundo parámetro es http.ServerResponse , que implementa la interfaz Writeable Stream .
La API de Stream está aquí: https://nodejs.org/api/stream.html. Al mismo tiempo, la solicitud y la respuesta son EventEmitters, que pueden emitir eventos específicos.
La API EventEmitter está aquí: https://nodejs.org/api/events.html#events_class_events_eventemitter. Más tarde hablaremos sobre cómo usar EventEmitter para lanzar y procesar eventos.
Revisemos el código que creamos el servidor:
http.createServer (function (solicitud, respuesta) {Response.Writehead (200, {"Content-type": "Text/Plain"}); Response.write ("¡Hola mundo!"); Response.end ();}). Listen (8000);http.createServer Devuelve una instancia http.server. El método de escucha de http.server puede permitir que el servidor escuche en un cierto puerto, que es 8000 en el ejemplo.
Como puede ver, proporcionamos una función anónima al método CreateServer. En este método, volvemos a escribir el "Hola mundo!" mensaje al cliente a través del parámetro de respuesta.
Analizar las solicitudes del cliente
Analizamos el método http.createServer anteriormente. Sus parámetros son un método con dos parámetros. Uno representa la solicitud enviada por el cliente y la otra representa la respuesta para volver a escribir al cliente. Echemos un vistazo a los parámetros de solicitud.
La solicitud es una instancia de http.IncomingMessage . A través de esta instancia, podemos obtener los parámetros de solicitud, como el método http, la versión http, la url, el encabezado, etc. La API específica está aquí: https://nodejs.org/api/http.html#http_http_incomingMessage.
Echemos un vistazo modificando helloworld.js (salvo como helloworld2.js). El código es el siguiente:
// Introducir el módulo http var http = require ("http"); // Crear un servidor, especificando la función que maneja las solicitudes del cliente http.createserver (function (request, respuesta) {console.log ("método -" + request.method); console.log ("versión -" + request.httpversion); console.log ("url -" + request.url); respuesta.writead "Text/Plain"}); console.log ("Hello World Start escucha en el puerto 8000");Como puede ver, utilicé el objeto de consola para generar información de depuración y método HTTP impreso, versión, URL y otra información. Puede ejecutar el nodo helloworld2.js, el navegador visita http: // localhost: 8000, y luego ejecutar a la línea de comando para ver qué información se emite. Soy así:
Nuestro simple Helloworld ya puede enviar algunos datos de respuesta al cliente, y puede ver las palabras "¡Hola mundo!" en tu navegador. Esta respuesta se envía al cliente a través de una response de instancia de http.ServerResponse .
http.ServerResponse también es una Stream o eventEmister. A través de él, devolvemos el código de estado HTTP, los datos, los encabezados HTTP y otra información al cliente.
Módulo HTTP
En el módulo HTTP de Node.js, la línea de estado se escribe al cliente a través del método Writehead de HTTP.ServerResponse. El prototipo del método Writehead es el siguiente:
Response.Writehead (StatusCode [, StatusMessage] [, encabezados])
El primer parámetro de este método es Statuscode, que es un número como 200 y 403. Los parámetros restantes son opcionales. El último parámetro son los encabezados, donde puede usar la notación del objeto JSON para escribir algunos encabezados HTTP, como: {“Content-Type”:”text/plain”,”Content-Length”:11} . El primer parámetro opcional StatusMessage se utiliza para especificar un mensaje de descripción de estado, que no se puede completar.
Encabezado http
El encabezado es algunos pares de valor clave. Por ejemplo, el "tipo de contenido" que vemos en Helloworld es la etiqueta de encabezado utilizada para indicar el tipo de datos, que puede corresponder a archivos de texto, imágenes, videos, binarios, etc. Del mismo modo, la "longitud de contenido" se usa para especificar la longitud de los datos. Hay muchos más, como "fecha", "conexión", etc., consulte el enlace anterior.
El encabezado también se puede establecer por separado utilizando el método response.setHeader(name, value) .
datos
Después del encabezado, hay datos. Algunos códigos de estado, como 200, tendrán algunos datos en el futuro. Y algunos, como 301, 404, 403, 500, la mayoría de ellos no tienen datos.
Los datos se vuelven a escribir al cliente a través del método de escritura de http.serverResponse, por ejemplo:
respuesta.setheader ("Type de contenido", "Text/Html");Aquí debemos mencionar que hay dos métodos comunes de codificación de transmisión de datos HTTP:
Establecer datos de contenido-longitud, transferir la longitud fija, establecer el encabezado de codificación de transferencia en datos de transferencia fragmentados en fragmentos
Al igual que nuestro ejemplo actual de Helloworld, sin establecer el encabezado de longitud de contenido, el módulo HTTP de Node.js predeterminado es una codificación fragmentada .
Utilizamos las herramientas de desarrollador de Chrome Browser para ver datos de red, que se pueden ver claramente. Como se muestra en la figura a continuación:
Respuesta HTTP
Los tres puntos que marcé son toda la información del encabezado HTTP pasada al navegador por el ejemplo de Helloworld.
Escribimos datos al cliente a través del método de escritura de HTTP.ServerResponse. Puede escribir todos los datos a la vez, o puede escribir los datos por separado y varias veces. Cuando la cantidad de datos a transferir es grande, escribir en varias veces es un enfoque más razonable. Por ejemplo, si envía un archivo grande al cliente, es más adecuado para escribir en varias veces. También puede usar la característica asincrónica de Node.js para obtener un buen rendimiento.