Hoy es el día tu aplicación Node.js aprende "go fetch".
Siguiendo este tutorial básico, aprenderás a construir una API REST para tu aplicación Node.js que envíe consultas SQL++ (también conocidas como N1QL) para recuperar datos de Couchbase.
Este post continúa mi serie introductoria sobre usando Node.js con Couchbaseincluyendo funciones asíncronas y Creación de una API REST con Node.js y Express.
El post de hoy continúa donde lo dejaron los anteriores tras construir una API REST para la recuperación directa de documentos.
Configuración de la base de datos Couchbase
Este post asume que usted ha instalado el viaje-muestra Cubo que viene con todo Couchbase instalaciones. Es importante que tenga instalado este conjunto de datos porque utilizaremos índices que se crean automáticamente y se utilizarán criterios específicos de documentos que son totalmente repetibles.
La conectividad básica y los cimientos de la API REST ya están establecidos en el guión que creamos juntos la semana pasada. Lo incluiré en el ejemplo de código de hoy, pero tendrás que leer todas las entradas anteriores (enlazadas más arriba) para obtener una explicación completa.
Además, en aras de la simplicidad en el ejemplo de hoy, usaremos los Scopes y Collections por defecto. Como de costumbre, cuando se trata de Query JSON data, también asumiré que tienes una familiaridad básica con JavaScript, Node.js y bases de datos de documentos NoSQL.
Entender las consultas N1QL
En Lenguaje de consulta N1QL para Couchbase es casi exactamente como SQL, con unas pocas excepciones.
Cuando una consulta N1QL solicita una columna específica de un Bucket, devuelve una lista de todos los documentos JSON coincidentes en el Bucket. Si no hay datos en el documento para la columna entonces se obtiene un NULL a menos que se filtre con un valor DONDE cláusula.
Como mínimo, debe existir un índice primario en los documentos para que éstos puedan consultarse. Sin embargo, el rendimiento de las consultas mejora cuando existe un índice secundario definido para una columna determinada.
Ambos índices pueden crearse con una consulta propiamente dicha y pueden hacerse mediante un script o a través de la función Consola web de Couchbase. De hecho, puedes conocer estos índices y ver la consulta utilizada para crearlos explorándolos en la consola web.
En el ejemplo anterior, se ha creado un índice en la columna denominada ciudad dentro de cualquier documento que se encuentre en el viaje-muestra Cubo.
Ejemplo de consulta
Antes de sumergirte en el código, puedes ejecutar consultas directamente en la consola web para asegurarte de que devuelven lo que esperas. Cambie a la función Consulta e introduzca la siguiente consulta, después pulse Ejecute.
|
1 |
SELECCIONAR * DESDE `viaje-muestra` DONDE ciudad = Los Ángeles; |
Los resultados muestran en la consola que 323 documentos coinciden. Observe que se devuelve una mezcla de documentos: hoteles, aeropuertos, etc., como se muestra en el gráfico tipo columna. (Ahora, estoy diciendo "columnas" pero por supuesto estos son en realidad objetos/elementos JSON que podrían estar incrustados dentro de otros objetos).
Modifique su consulta para que sólo devuelva unas pocas columnas, como en el ejemplo siguiente.
|
1 |
SELECCIONE tipo, nombre, ciudad DESDE `viaje-muestra` DONDE ciudad = Los Ángeles; |
Creación de una función de consulta
Antes de sumergirnos en el resto del código, empezaremos por ver lo básico de pasar consultas utilizando el SDK de Node.js.
En lugar de pasar una cadena de consulta completamente formada, querrás utilizar los marcadores de posición incorporados para que sea código reutilizable. En este caso, utiliza parámetros con nombre: Su consulta tendrá una variable de marcador de posición, y usted pasará una variable con los valores a utilizar.
En primer lugar, cree la variable de consulta:
|
1 |
const querystr = `SELECCIONE tipo, nombre, ciudad DESDE `viaje-muestra` DONDE ciudad = $CIUDAD;` |
A continuación, cree la variable de parámetros de entrada:
|
1 |
const parámetros = { parámetros: { CIUDAD: Los Ángeles }} |
A continuación, pasa ambos datos a la función de consulta del clúster para que inicie y devuelva los resultados:
|
1 |
deje resultado = await grupo.consulta(querystr, parámetros) |
La función completa que crea ahora es posible:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
async función getQuery(){ const querystr = `SELECCIONE tipo, nombre, ciudad DESDE `viaje-muestra` DONDE ciudad = $CIUDAD;` const parámetros = { parámetros: { CIUDAD: Los Ángeles }} pruebe { deje resultado = await grupo.consulta(querystr, parámetros) consola.registro("Resultado:", resultado) devolver resultado } captura (error) { consola.error("Consulta fallida: ", error) } }; |
REST-ificar su consulta
El siguiente paso es añadir esta función de consulta a nuestro anterior ejemplo de código de la API REST para poder introducir el nombre de una ciudad y devolver los resultados HTTP al navegador.
En primer lugar, haga que la función pase una variable para el nombre de la ciudad, como se indica a continuación:
|
1 |
async función getQuery(nombre de la ciudad){... |
A continuación, cree un punto final de consulta (en lugar del archivo consiga que usamos en un post anterior) y mover la lógica de la respuesta REST a esa función.
|
1 2 3 4 5 6 7 8 9 10 11 |
aplicación.consiga(/consulta/:nombreciudad, runAsync(async (consulte, res) => { var nombre de la ciudad = consulte.parámetros.nombre de la ciudad; var querystr = `SELECCIONE tipo, nombre, ciudad DESDE `viaje-muestra` DONDE ciudad = $CIUDAD;` var parámetros = { parámetros: { CIUDAD: nombre de la ciudad}} await grupo.consulta(querystr, parámetros, función(err, resultado){ res.json(resultado) }) })); |
Esto devuelve el RAW JSON de la llamada REST, como se muestra en la imagen de abajo en el navegador web o en la herramienta Postman REST API.
Ejemplo de código completo
Aquí está el resultado completo del código de ejemplo. Tenga en cuenta que algunos códigos anteriores de otros artículos se mantienen para su referencia.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
var aplicación = requiere(exprés)(); var couchbase = requiere("couchbase"); async función principal(){ aplicación.consiga('/get/:docid', runAsync(async (consulte, res) => { var docid = consulte.parámetros.docid; var docjson = await getDoc(docid, función(err, resultado){ res.json(resultado.contenido) }); })); aplicación.consiga(/consulta/:nombreciudad, runAsync(async (consulte, res) => { var nombre de la ciudad = consulte.parámetros.nombre de la ciudad; var querystr = `SELECCIONE tipo, nombre, ciudad DESDE `viaje-muestra` DONDE ciudad = $CIUDAD;` var parámetros = { parámetros: { CIUDAD: nombre de la ciudad}} await grupo.consulta(querystr, parámetros, función(err, resultado){ res.json(resultado) }) })); aplicación.escuche(3000, () => consola.registro(Escuchando en el puerto 3000)); función runAsync (devolución de llamada) { devolver función (consulte, res, siguiente) { devolución de llamada(consulte, res, siguiente) .captura(siguiente) } } var grupo = nuevo couchbase.Grupo("couchbase://localhost", { nombre de usuario: "Administrador", contraseña: "Administrador" }); var cubo = grupo.cubo("viaje-muestra"); var colección = cubo.defaultCollection(); var getDoc = async (clave) => { var resultado = await colección.consiga(clave); consola.registro(resultado) devolver resultado } } principal(); |
Conclusión
Hay un montón de nuevas direcciones que puede tomar este proyecto. Para empezar, es posible que desee incluir la captura de errores adecuada, información de registro de salida a la consola, o el uso de la resultados.filas para crear resultados tabulares.
Le animo a profundizar en la documentación de Couchbase sobre el uso de consultas del SDK de Node.js.
Póngase al día con el resto de la serie Node.js + Couchbase how-to:
-
- Cómo empezar con el SDK de Node.js para Couchbase
- Cómo crear llamadas asíncronas Get/Upsert con Node.js y Couchbase
- Construir una aplicación basada en REST con Node.js, Express y Couchbase
- Cómo consultar datos JSON con SQL++ para Node.js y Couchbase
- Cómo añadir la función de búsqueda de texto completo a su aplicación JavaScript
Pruebe Couchbase hoy mismo


