Node.js GET/POST requests
En muchos escenarios, nuestro servidor necesita interactuar con el navegador del usuario, como el envío de formularios.
El envío de formularios al servidor generalmente utiliza solicitudes GET/POST.
En este capítulo presentaremos las solicitudes GET/POST de Node.js.
Obtener el contenido de una solicitud GET
Debido a que la solicitud GET está directamente incrustada en la ruta, la URL es la ruta de solicitud completa, incluyendo?la parte posterior, por lo que puede analizar manualmente el contenido posterior como parámetros de la solicitud GET.
En Node.js, puede utilizar el constructor URL para analizar la URL de la solicitud.
El objeto URL es una herramienta estándar en Node.js para analizar y manipular URL. Proporciona una interfaz conveniente para acceder y modificar los distintos componentes de una URL, como protocolo, nombre de host, ruta, parámetros de consulta, etc.
Ejemplo
Acceda en el navegadorhttp://localhost:3000/user?name=Ejemplo&url=www.example.comLuego vea el resultado devuelto:

Obtener los parámetros de la URL
Podemos usar el método url.parse para analizar los parámetros de la URL, el código es el siguiente:
Ejemplo
Acceda en el navegadorhttp://localhost:3000/user?name=Ejemplo&url=www.example.comLuego vea el resultado devuelto:

Objeto URL
A continuación se presentan las propiedades y métodos del objeto URL:
| Propiedad/Método | Descripción | Salida de ejemplo |
|---|---|---|
| href | Cadena URL completa | "http://example.com:8080/path?foo=bar#section" |
| origin | El origen de la URL, incluyendo protocolo, nombre de host y puerto (si existe) | "http://example.com:8080" |
| protocol | La parte del protocolo de la URL, seguida de: | "http:" |
| host | Nombre de host y número de puerto | "example.com:8080" |
| hostname | Nombre de host, sin incluir el número de puerto | "example.com" |
| port | Número de puerto (si se especifica) | "8080" |
| pathname | Parte del nombre de ruta | "/path" |
| search | Parte de la cadena de consulta, incluyendo el? | "?foo=bar&hello=world" |
| searchParams | URLSearchParamsObjeto, utilizado para manipular los parámetros de consulta | { foo: 'bar', hello: 'world' } |
| hash | Parte del ancla, incluyendo# | "#section" |
| Método | Descripción | Código de ejemplo | Salida de ejemplo |
|---|---|---|---|
| get(name) | Obtener el valor del parámetro de consulta del nombre especificado | myUrl.searchParams.get("foo") | "bar" |
| append(name, value) | Agregar nuevos parámetros a la cadena de consulta | myUrl.searchParams.append("newKey", "newValue") | ?foo=bar&newKey=newValue |
| set(name, value) | Establecer el parámetro del nombre especificado en la cadena de consulta (actualizar si ya existe) | myUrl.searchParams.set("foo", "newBar") | ?foo=newBar |
| delete(name) | Eliminar el parámetro de consulta del nombre especificado | myUrl.searchParams.delete("foo") | ?hello=world |
| has(name) | Determinar si la cadena de consulta contiene un parámetro con el nombre especificado | myUrl.searchParams.has("foo") | trueofalse |
| forEach(callback) | Iterar sobre los pares clave-valor de los parámetros de consulta y ejecutar la función de retorno | myUrl.searchParams.forEach((v, k) => console.log(k, v)) | Salida de pares clave-valor |
| toString() | Convertir los parámetros de consulta a forma de cadena, adecuado para reconstruir la URL | myUrl.searchParams.toString() | "foo=bar&hello=world" |
Ejemplo
console.log(myUrl.pathname); // Output: /path
console.log(myUrl.searchParams.get("foo")); // Output: bar
myUrl.searchParams.append("newKey", "newValue");
console.log(myUrl.href); // Output: http://example.com/path?foo=bar&hello=world&newKey=newValue
Obtener el contenido de una solicitud POST
En Node.js, el manejo de las solicitudes POST suele requerir recibir los datos del cuerpo de la solicitud a través del módulo http. A diferencia de las solicitudes GET, los datos de una solicitud POST no se incluyen en la URL, sino que se envían como cuerpo de la solicitud. Por lo tanto, al recibir datos POST en Node.js, es necesario escuchar y manejarrequestdel objetodatayendeventos.
- Escuchar
datael evento: cuando un bloque de datos llega al servidor,datael evento se dispara y el bloque de datos se pasa como parámetro del callback. - Escuchar
endel evento: cuando todo el cuerpo de la solicitud ha sido recibido,endel evento se dispara y entonces se pueden procesar los datos completos de la solicitud POST.
Ejemplo
// Crear un servidor HTTP
http.createServer((req, res) => {
// Comprobar si el método de solicitud es POST
if (req.method === 'POST') {
let body = '';
// Escuchar el evento data, recibir los datos por bloques
req.on('data', (chunk) => {
body += chunk; // Acumular los bloques de datos recibidos
});
// Escuchar el evento end, la recepción de datos ha terminado
req.on('end', () => {
// Mostrar los datos POST recibidos
console.log('Received POST data:', body);
// Establecer el encabezado y el contenido de la respuesta
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('POST data received successfully!');
});
} else {
// Manejo de solicitudes que no son POST
res.writeHead(405, { 'Content-Type': 'text/plain' });
res.end('Only POST requests are supported.');
}
}).listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
Explicación del código:
- Detectar el método de solicitud: mediante
req.method === 'POST'se determina si el tipo de solicitud es POST. - Recibir datos: en
req.on('data')se acumulan los bloques de datos en el evento, formando el cuerpo de datos completo. - Completar la recepción: en
req.on('end')se procesan los datos POST completos en el evento. - Responder al cliente: después de completar la recepción y el procesamiento de datos, se envía una respuesta al cliente.
Puede usar el comando curl para probar la solicitud POST:
curl -X POST -d "name=example&age=25" http://localhost:3000
Manejo de datos JSON
Si la solicitud POST envía datos JSON, se puedereq.on('end')en él, analizar los datos recibidos como un objeto:
req.on('end', () => {
const parsedData = JSON.parse(body); // 将 JSON 字符串解析为对象
console.log('Received JSON data:', parsedData);
res.end('JSON data received successfully!');
});
módulo querystring
El módulo querystring se utiliza para manejar los datos de las cadenas de consulta de URL y de las solicitudes POST.
Para los datos de solicitudes POST codificados como application/x-www-form-urlencoded, el módulo querystring puede ayudar a analizar el cuerpo de la solicitud y convertirlo en un objeto de JavaScript, lo que facilita el acceso y la manipulación.
Supongamos que el formato de los datos de la solicitud POST enviada por el cliente esapplication/x-www-form-urlencoded(por ejemplo, envío de formularios), los datos son similares aname=example&age=25. Después de recibir los datos, se puede usar elquerystring.parsemétodo para analizar los datos y convertirlos en un objeto.
Explicación de la estructura de sintaxis básica
El siguiente ejemplo envía un formulario mediante POST y muestra los datos:
Ejemplo
Demostración en GIF del resultado de ejecución:
