{"id":5036,"date":"2018-04-23T09:46:20","date_gmt":"2018-04-23T16:46:20","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5036"},"modified":"2025-06-13T20:15:00","modified_gmt":"2025-06-14T03:15:00","slug":"creating-a-graphql-application-with-node-js-and-a-nosql-database","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","title":{"rendered":"Crear una aplicaci\u00f3n GraphQL con Node.js y bases de datos NoSQL"},"content":{"rendered":"<p>He o\u00eddo muchos rumores sobre trabajar con <a href=\"https:\/\/graphql.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GraphQL<\/a> y NoSQL, internamente dentro de Couchbase y externamente. Ya que suena como un tema candente, pens\u00e9 en pasar alg\u00fan tiempo aprendiendo sobre ello para ver c\u00f3mo podr\u00eda ser valioso a la hora de crear aplicaciones web.<\/p>\n<p>Viniendo del mundo de las API RESTful, GraphQL es un concepto totalmente diferente para m\u00ed, aunque su objetivo es resolver un problema similar de acceso y mutaci\u00f3n de datos a trav\u00e9s de aplicaciones orientadas al cliente. <span style=\"font-weight: 400\">Afortunadamente, Node.js y las bases de datos trabajan mano a mano, por lo que en el ejemplo de GraphQL-base de datos a continuaci\u00f3n vamos a ser <a href=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-rest-api-with-node-js-express-and-couchbase\/\">usando Node.js<\/a> con<\/span> <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a> como nuestro <a href=\"https:\/\/www.couchbase.com\/blog\/es\/resources\/why-nosql\/\">Base de datos NoSQL<\/a> capa.<\/p>\n<p><!--more--><\/p>\n<p>En este momento, no soy un experto en GraphQL. Llevo muchos a\u00f1os desarrollando APIs RESTful con frameworks como Express y Hapi. Dicho esto, voy a tratar de explicar c\u00f3mo he aprendido acerca de ellos.<\/p>\n<p>Las API funcionan muy bien, pero cuando se trata de obtener la informaci\u00f3n que necesitas de ellas, las cosas se pueden hacer mejor. Por ejemplo, \u00bfqu\u00e9 pasa si necesitas un mont\u00f3n de datos no relacionados o poco relacionados para tu cliente? \u00bfCrea un punto final masivo que devuelva muchos datos o realiza una solicitud a cada punto final de API que pueda contener sus datos? \u00bfY si s\u00f3lo necesita un fragmento de los datos devueltos por un punto final concreto?<\/p>\n<p>Aqu\u00ed es donde GraphQL entra en juego. Mediante el lenguaje de consulta puedes especificar exactamente qu\u00e9 datos quieres que se devuelvan al cliente en cada momento sin tener que escribir un endpoint para todo.<\/p>\n<h2>Creaci\u00f3n de una nueva aplicaci\u00f3n Node.js con Express Framework<\/h2>\n<p>Vamos a utilizar Node.js para crear una interfaz para utilizar <a href=\"https:\/\/www.couchbase.com\/blog\/es\/processing-graphql-queries-with-java-spring-boot-and-nosql\/\">Consultas GraphQL<\/a>. Empecemos creando un nuevo proyecto, obteniendo las dependencias y arrancando nuestro proyecto en preparaci\u00f3n para algo de l\u00f3gica real.<\/p>\n<p>Con Node.js instalado, desde la l\u00ednea de comandos, ejecute:<\/p>\n<pre class=\"lang:default decode:true\">npm init -y\r\nnpm install couchbase --save\r\nnpm install express --save\r\nnpm install express-graphql --save\r\nnpm install graphql --save\r\nnpm install uuid --save<\/pre>\n<p>Los comandos anteriores inicializar\u00e1n un nuevo proyecto creando un archivo\u00a0<strong>paquete.json<\/strong> e instalando las dependencias necesarias. De las dependencias, estamos instalando Couchbase y un paquete para generar cadenas UUID que m\u00e1s tarde representar\u00e1n las claves de nuestros documentos. Los otros paquetes est\u00e1n relacionados con GraphQL y su vinculaci\u00f3n con Express Framework.<\/p>\n<p>Cree un archivo llamado\u00a0<strong>app.js<\/strong> dentro de su proyecto e incluya el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:default decode:true\">const Express = require(\"express\");\r\nconst Couchbase = require(\"couchbase\");\r\nconst ExpressGraphQL = require(\"express-graphql\");\r\nconst BuildSchema = require(\"graphql\").buildSchema;\r\nconst UUID = require(\"uuid\");\r\n\r\nvar schema = BuildSchema(``);\r\n\r\nvar resolvers = { };\r\n\r\nvar app = Express();\r\n\r\napp.use(\"\/graphql\", ExpressGraphQL({\r\n    esquema: esquema,\r\n    rootValue: resolvers,\r\n    graphiql: true\r\n}));\r\n\r\napp.listen(3000, () =&gt; {\r\n    console.log(\"Escuchando en :3000\");\r\n});<\/pre>\n<p>No vamos a preocuparnos por rellenar nuestro esquema y configurar nuestra base de datos todav\u00eda. En el c\u00f3digo anterior, observa que hemos importado cada una de nuestras dependencias e inicializado Express. Tambi\u00e9n hemos definido un \u00fanico endpoint API que es como vamos a conseguir que Couchbase y GraphQL interact\u00faen. Esencialmente, vamos a enviar cada consulta GraphQL a ese \u00fanico endpoint y responder\u00e1 con los datos correctos basados en nuestro esquema y resolvers.<\/p>\n<h2>Definici\u00f3n de un esquema GraphQL y Resolvers<\/h2>\n<p>Ahora que ya tenemos la base de la aplicaci\u00f3n, vamos a definir un esquema y los resolvers para vincular los datos a posibles consultas y tipos de datos.<\/p>\n<p>Para este ejemplo, vamos a crear una sencilla aplicaci\u00f3n de blogging. Por esta raz\u00f3n, podr\u00eda tener sentido tener los siguientes modelos de esquema:<\/p>\n<pre class=\"lang:default decode:true\">var schema = BuildSchema(`\r\n    tipo Cuenta {\r\n        id: String,\r\n        nombre: String,\r\n        apellido: String,\r\n    }\r\n    tipo Blog {\r\n        id: String,\r\n        cuenta: String\r\n        t\u00edtulo: String,\r\n        contenido: String\r\n    }\r\n`);<\/pre>\n<p>Sabemos que tendremos cuentas y sabemos que tendremos art\u00edculos de blog para cualquier cuenta dada. El signo de exclamaci\u00f3n para cualquier tipo de dato significa que es una propiedad obligatoria.<\/p>\n<p>Ahora necesitamos conectar nuestro modelo a Couchbase para poder consultar datos o incluso crearlos.<\/p>\n<h2>Consulta y mutaci\u00f3n de datos desde Couchbase Server, la base de datos NoSQL<\/h2>\n<p>Vamos a suponer que usted ya tiene <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a> funcionando. No hay ning\u00fan requisito especial de configuraci\u00f3n de Couchbase para este ejemplo en particular.<\/p>\n<p>El primer paso es conectarse a Couchbase Server desde la aplicaci\u00f3n Node.js. Dentro del proyecto\u00a0<strong>app.js<\/strong> a\u00f1ada las siguientes l\u00edneas:<\/p>\n<pre class=\"lang:default decode:true\">var cluster = new Couchbase.Cluster(\"couchbase:\/\/localhost\");\r\ncluster.authenticate(\"ejemplo\", \"123456\");\r\nvar bucket = cluster.openBucket(\"ejemplo\");<\/pre>\n<p>Las l\u00edneas anteriores asumen que Node.js y la base de datos - Couchbase, en este ejemplo - se est\u00e1n ejecutando en la m\u00e1quina local. Vamos a utilizar un Bucket llamado <code>ejemplo<\/code> y una cuenta de usuario RBAC denominada <code>ejemplo<\/code>.<\/p>\n<p>Ya tenemos los modelos de datos para GraphQL, pero no hemos definido las posibles consultas o mutaciones. Modifiquemos el esquema de nuestra aplicaci\u00f3n para que tenga el siguiente aspecto:<\/p>\n<pre class=\"lang:default decode:true\">var schema = BuildSchema(`\r\n    tipo Consulta {\r\n        cuenta(id: \u00a1Cadena!): Cuenta,\r\n        cuentas: [Cuenta],\r\n        blog(id: \u00a1Cadena!): Blog,\r\n        blogs(cuenta: \u00a1Cadena!): [Blog]\r\n    }\r\n    type Cuenta {\r\n        id: String,\r\n        firstname: String,\r\n        apellido: String,\r\n    }\r\n    tipo Blog {\r\n        id: String,\r\n        cuenta: String\r\n        t\u00edtulo: String,\r\n        contenido: String\r\n    }\r\n    tipo Mutaci\u00f3n {\r\n        createAccount(nombre: \u00a1Cadena!, apellido: \u00a1Cadena!): Cuenta\r\n        createBlog(cuenta: \u00a1Cadena!, t\u00edtulo: \u00a1Cadena!, contenido: \u00a1Cadena!): Blog\r\n    }\r\n`);<\/pre>\n<p>Tanto para las consultas como para las mutaciones, se llamar\u00e1 a funciones especiales de resoluci\u00f3n que har\u00e1n el trabajo pesado. Como resultado, o bien un <code>Cuenta<\/code> o un <code>Blog<\/code> ser\u00e1 devuelto.<\/p>\n<p>Empezando por las mutaciones, esperamos un <code>crearCuenta<\/code> que espera dos par\u00e1metros. Puede tener el siguiente aspecto:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    crearCuenta: (datos) =&gt; {\r\n        var id = UUID.v4();\r\n        data.type = \"cuenta\";\r\n        return new Promise((resolver, rechazar) =&gt; {\r\n            bucket.insert(id, data, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve({ \"id\": id });\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>Observe que nuestra funci\u00f3n resolver s\u00f3lo tiene un par\u00e1metro a pesar de que est\u00e1bamos pasando dos en nuestro esquema. Todos nuestros par\u00e1metros de datos residir\u00e1n en el directorio <code>datos<\/code> variable. La propia funci\u00f3n espera que devolvamos una promesa.<\/p>\n<p>Observar\u00e1 que devolvemos un <code>id<\/code> y nada m\u00e1s. Recuerde, esperamos un <code>Cuenta<\/code> a devolver, pero no todas las partes de <code>Cuenta<\/code> debe estar presente. Sin embargo, puede ser una mejor pr\u00e1ctica para devolver todo.<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    createBlog: (datos) =&gt; {\r\n        var id = UUID.v4();\r\n        data.type = \"blog\";\r\n        return new Promise((resolver, rechazar) =&gt; {\r\n            bucket.insert(id, data, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve({ \"id\": id });\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>En <code>crearBlog<\/code> es pr\u00e1cticamente igual a la funci\u00f3n anterior, con la excepci\u00f3n de que los datos de entrada son diferentes y la funci\u00f3n <code>tipo<\/code> tiene otro valor. Todas nuestras funciones estar\u00e1n en el mismo <code>solucionadores<\/code> objeto.<\/p>\n<p>Una vez eliminadas las mutaciones, se pueden consultar los datos. Toma los <code>cuenta<\/code> por ejemplo:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    cuenta: (datos) =&gt; {\r\n        var id = datos.id;\r\n        return new Promise((resolver, rechazar) =&gt; {\r\n            bucket.get(id, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(valor.result);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>No ocurre nada realmente diferente entre esta funci\u00f3n de consulta en particular y la funci\u00f3n de mutaci\u00f3n. Esperamos un <code>id<\/code> y lo usamos para hacer una b\u00fasqueda.<\/p>\n<p>Para recuperar todas las cuentas, podemos utilizar una consulta N1QL:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    cuentas: () =&gt; {\r\n        var statement = \"SELECT META(cuenta).id, account.* FROM `\" + bucket._name + \"` AS account WHERE account.type = 'cuenta'\";\r\n        var query = Couchbase.N1qlQuery.fromString(statement);\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.query(query, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>\u00bfPuedes ver la tendencia ahora cuando se trata de consultar y mutar datos? Para terminar el trabajo, veamos nuestras dos funciones finales, una para obtener un solo blog y otra para obtener todos los blogs.<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    blog: (datos) =&gt; {\r\n        var id = datos.id;\r\n        return new Promise((resolver, rechazar) =&gt; {\r\n            bucket.get(id, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(valor.result);\r\n            });\r\n        });\r\n    },\r\n    blogs: (datos) =&gt; {\r\n        var statement = \"SELECT META(blog).id, blog.* FROM `\" + bucket._name + \"` AS blog WHERE blog.type = 'blog' AND blog.account = $account\";\r\n        var query = Couchbase.N1qlQuery.fromString(statement);\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.query(query, { \"cuenta\": datos.cuenta }, (error, resultado) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>En este momento, nuestra aplicaci\u00f3n est\u00e1 completa. Al menos lo suficientemente completa para este ejemplo en particular. Ahora probablemente deber\u00edamos probarla con algunas consultas GraphQL.<\/p>\n<h2>Ejecuci\u00f3n de consultas GraphQL con la interfaz gr\u00e1fica<\/h2>\n<p>Si est\u00e1s usando Node.js y el paquete GraphQL para Express, obtendr\u00e1s una bonita interfaz gr\u00e1fica para ejecutar consultas. Navega a https:\/\/localhost:3000\/graphql en tu navegador web y deber\u00edas ver algo parecido a lo siguiente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5038 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/04\/graphql-nodejs.png\" alt=\"\" width=\"1500\" height=\"679\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png 1500w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-300x136.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-1024x464.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-768x348.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-1320x598.png 1320w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>As\u00ed que vamos a crear una consulta de mutaci\u00f3n que insertar\u00e1 los datos para nosotros.<\/p>\n<pre class=\"lang:default decode:true\">mutaci\u00f3n CrearCuenta(1TP4Nombre: \u00a1Cadena!, 1TP4Apellido: \u00a1Cadena!) {\r\n  createAccount(firstname: $firstname, lastname: $lastname) {\r\n    id\r\n  }\r\n}<\/pre>\n<p>La mutaci\u00f3n anterior tomar\u00e1 dos par\u00e1metros obligatorios y luego ejecutar\u00e1 nuestro <code>crearCuenta<\/code> pasando cada uno de esos par\u00e1metros. Los par\u00e1metros pueden establecerse en el <strong>Variables de consulta<\/strong> del explorador GraphQL. Los par\u00e1metros ser\u00edan algo parecido a esto:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"nombre\": \"Erika\",\r\n  \"lastname\": \"Raboy\"\r\n}<\/pre>\n<p>Tras una mutaci\u00f3n exitosa, obtendremos el <code>id<\/code> que es lo que hemos solicitado. Despu\u00e9s de haber llenado nuestra base de datos con datos, podr\u00edamos hacer una consulta GraphQL m\u00e1s sofisticada como la siguiente:<\/p>\n<pre class=\"lang:default decode:true\">query GetAccountData($id: String!) {\r\n  account(id: $id) {\r\n    nombre\r\n    apellido\r\n  }\r\n  blogs(cuenta: $id) {\r\n    t\u00edtulo\r\n    contenido\r\n  }\r\n}<\/pre>\n<p>Para la consulta anterior, introducir\u00edas una cuenta v\u00e1lida y te devolver\u00eda la informaci\u00f3n de la cuenta, as\u00ed como la informaci\u00f3n del blog que esa cuenta ha escrito. A trav\u00e9s de las consultas GraphQL puedes solicitar ciertas propiedades o todas las propiedades ahorr\u00e1ndote hacer m\u00faltiples peticiones.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Acabas de ver c\u00f3mo crear una sencilla base de datos Node.js aprovechando GraphQL en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a>. S\u00f3lo porque GraphQL le da un medio para consultar los datos que necesita, no elimina la necesidad de escribir consultas de calidad que se comunican con su base de datos. Recuerda, GraphQL es s\u00f3lo un lenguaje de consulta de cara al cliente, no un lenguaje de consulta de base de datos backend. En otras palabras, deja que Couchbase haga el trabajo pesado donde tenga sentido.<\/p>\n<p>Si desea obtener m\u00e1s ayuda con el SDK de Node.js para Couchbase, consulte la secci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">Portal para desarrolladores de Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been hearing a lot of buzz around working with GraphQL and NoSQL, internally within Couchbase and externally. Since it sounds like a hot topic, I figured I&#8217;d spend some time learning about it to see how it could be [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1816,9327,1822,1812],"tags":[1393,2210,1543,1725],"ppma_author":[9032],"class_list":["post-5036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-server","category-javascript","category-node-js","category-n1ql-query","tag-api","tag-graphql","tag-javascript","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Creating a GraphQL Application With Node.js and a NoSQL Database<\/title>\n<meta name=\"description\" content=\"Learn GraphQL for querying in a NoSQL Node.js database application that&#039;s built for Couchbase. You&#039;ll also learn when to use GraphQL, and when not to.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a GraphQL Application With Node.js, NoSQL Databases\" \/>\n<meta property=\"og:description\" content=\"Learn GraphQL for querying in a NoSQL Node.js database application that&#039;s built for Couchbase. You&#039;ll also learn when to use GraphQL, and when not to.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-23T16:46:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"679\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Create a GraphQL Application With Node.js, NoSQL Databases\",\"datePublished\":\"2018-04-23T16:46:20+00:00\",\"dateModified\":\"2025-06-14T03:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"},\"wordCount\":1265,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"API\",\"graphql\",\"javascript\",\"NoSQL Database\"],\"articleSection\":[\"Application Design\",\"Couchbase Server\",\"JavaScript\",\"Node.js\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\",\"name\":\"Creating a GraphQL Application With Node.js and a NoSQL Database\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-04-23T16:46:20+00:00\",\"dateModified\":\"2025-06-14T03:15:00+00:00\",\"description\":\"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a GraphQL Application With Node.js, NoSQL Databases\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating a GraphQL Application With Node.js and a NoSQL Database","description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","og_locale":"es_MX","og_type":"article","og_title":"Create a GraphQL Application With Node.js, NoSQL Databases","og_description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2018-04-23T16:46:20+00:00","article_modified_time":"2025-06-14T03:15:00+00:00","og_image":[{"width":1500,"height":679,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png","type":"image\/png"}],"author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Create a GraphQL Application With Node.js, NoSQL Databases","datePublished":"2018-04-23T16:46:20+00:00","dateModified":"2025-06-14T03:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"},"wordCount":1265,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["API","graphql","javascript","NoSQL Database"],"articleSection":["Application Design","Couchbase Server","JavaScript","Node.js","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","url":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","name":"Creating a GraphQL Application With Node.js and a NoSQL Database","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-04-23T16:46:20+00:00","dateModified":"2025-06-14T03:15:00+00:00","description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create a GraphQL Application With Node.js, NoSQL Databases"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=5036"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5036\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=5036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=5036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=5036"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=5036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}