{"id":2478,"date":"2017-01-10T15:00:00","date_gmt":"2017-01-10T15:00:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2478"},"modified":"2025-06-13T21:22:44","modified_gmt":"2025-06-14T04:22:44","slug":"using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/","title":{"rendered":"Uso de PouchDB y Couchbase NoSQL en tu aplicaci\u00f3n web Node.js"},"content":{"rendered":"<p>Una de mis tecnolog\u00edas preferidas para desarrollar aplicaciones web es Node.js. Hago mucho desarrollo en JavaScript, as\u00ed que es otra pieza que encaja en mi puzzle de desarrollo. No hace mucho escrib\u00ed una gu\u00eda para <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-couchbase-server-and-couchbase-mobile-in-the-same-project-with-nodejs\/\">usando Couchbase Mobile y el SDK de Couchbase Node.js en la misma pila<\/a>. En ese art\u00edculo hab\u00eda mencionado que hay varias maneras diferentes de llevar a cabo esta tarea. Me imagin\u00e9 que iba a elaborar en otra forma de hacer el trabajo, esta vez usando <a href=\"https:\/\/pouchdb.com\/\">PouchDB<\/a>.<\/p>\n<p>PouchDB es una base de datos JavaScript que funciona en combinaci\u00f3n con Couchbase Sync Gateway y Couchbase Server. Al ser JavaScript, puedes usarlo en tus aplicaciones basadas en servidor y navegador.<\/p>\n<h2 id=\"the-requirements\">Requisitos<\/h2>\n<p>Dado que se trata de una aplicaci\u00f3n JavaScript no habr\u00e1 muchas dependencias de software. Las pocas que existen son las siguientes:<\/p>\n<ul>\n<li>Node.js 4.0+<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/nosql-databases\/downloads\/\">Pasarela de sincronizaci\u00f3n Couchbase<\/a><\/li>\n<\/ul>\n<p>Esta es una aplicaci\u00f3n Node.js, pero el Node Package Manager (NPM) es lo que har\u00e1 la mayor parte del trabajo pesado cuando se trata de preparar nuestro proyecto. Obtendr\u00e1 PouchDB y el resto de dependencias. Usaremos el Couchbase Sync Gateway <a href=\"https:\/\/www.couchbase.com\/blog\/es\/resources\/concepts\/in-memory-database\/\">base de datos en memoria<\/a> porque esto es s\u00f3lo una aplicaci\u00f3n de ejemplo. En producci\u00f3n, querr\u00e1s conectar Sync Gateway a Couchbase Server para el almacenamiento persistente.<\/p>\n<h2 id=\"configuring-couchbase-sync-gateway-for-data-synchronization\">Configuraci\u00f3n de Couchbase Sync Gateway para la sincronizaci\u00f3n de datos<\/h2>\n<p>Sync Gateway manejar\u00e1 todos nuestros datos remotos antes y despu\u00e9s de que lleguen a Couchbase Server. Es nuestro servicio intermediario que orquestar\u00e1 los datos entre plataformas, dispositivos, etc. No es un requisito para construir aplicaciones Node.js que funcionen con Couchbase Server. Lo usamos porque tambi\u00e9n queremos soportar sincronizaci\u00f3n m\u00f3vil, aunque no se demostrar\u00e1 en este ejemplo.<\/p>\n<p>Con Couchbase Sync Gateway descargado e instalado, necesitamos establecer una configuraci\u00f3n para cargar en tiempo de ejecuci\u00f3n. Crea un archivo llamado <strong>sync-gateway-config.json<\/strong> e incluyen lo siguiente:<\/p>\n<pre><code>{\r\n    \"log\":[\"CRUD+\", \"REST+\", \"Changes+\", \"Attach+\"],\r\n    \"databases\": {\r\n        \"example\": {\r\n            \"server\":\"walrus:\",\r\n            \"sync\":`\r\n                function (doc) {\r\n                    channel (doc.channels);\r\n                }\r\n            `,\r\n            \"users\": {\r\n                \"GUEST\": {\r\n                    \"disabled\": false,\r\n                    \"admin_channels\": [\"*\"]\r\n                }\r\n            }\r\n        }\r\n    },\r\n    \"CORS\": {\r\n        \"Origin\": [\"https:\/\/localhost:3000\"],\r\n        \"LoginOrigin\": [\"https:\/\/localhost:3000\"],\r\n        \"Headers\": [\"Content-Type\"],\r\n        \"MaxAge\": 17280000\r\n    }\r\n}<\/code><\/pre>\n<p>En el archivo de configuraci\u00f3n b\u00e1sico anterior establecemos una base de datos llamada <strong>ejemplo<\/strong> que utiliza la opci\u00f3n de almacenamiento en memoria de Sync Gateway. No hay permisos espec\u00edficos de lectura o escritura en esta configuraci\u00f3n, lo que significa que todos los datos existir\u00e1n en el mismo canal.<\/p>\n<p>Debido a que estamos ejecutando Sync Gateway y nuestro ejemplo Node.js que pronto ser\u00e1 creado en la misma m\u00e1quina, pero diferentes puertos, tenemos que permitir el uso compartido de recursos de origen cruzado (CORS). Si no lo hacemos, terminaremos con errores relacionados con JavaScript. En la configuraci\u00f3n anterior estamos diciendo que queremos permitir la comunicaci\u00f3n desde https:\/\/localhost:3000, que es nuestra aplicaci\u00f3n Node.js.<\/p>\n<p>En este punto puede ejecutarse Sync Gateway. En un entorno de producci\u00f3n, el servidor en memoria <strong>morsa<\/strong> puede sustituirse por el nombre de host de un cl\u00faster de Couchbase Server concreto.<\/p>\n<h2 id=\"developing-the-node.js-web-application\">Desarrollo de la aplicaci\u00f3n web Node.js<\/h2>\n<p>Para hacer las cosas f\u00e1ciles de entender, vamos a crear una aplicaci\u00f3n Node.js fresca y trabajar nuestro camino hacia arriba. Esto se puede hacer utilizando el gestor de paquetes de Node.<\/p>\n<p>Desde el S\u00edmbolo del sistema o Terminal, ejecute lo siguiente:<\/p>\n<pre><code>npm init --y<\/code><\/pre>\n<p>El comando anterior crear\u00e1 un <strong>paquete.json<\/strong> que mantendr\u00e1 todas las dependencias de nuestro proyecto. Con el archivo <strong>paquete.json<\/strong> en su lugar, vamos a obtener algunas dependencias:<\/p>\n<pre><code>npm install express body-parser pouchdb --save<\/code><\/pre>\n<p>El comando anterior instalar\u00e1 Express Framework, un paquete necesario para gestionar los datos del cuerpo de las peticiones, y PouchDB para gestionar los datos de nuestra aplicaci\u00f3n.<\/p>\n<p>Antes de empezar a escribir c\u00f3digo, tenemos que crear un archivo llamado <strong>app.js<\/strong> que contendr\u00e1 toda la l\u00f3gica de nuestra aplicaci\u00f3n.<\/p>\n<h3 id=\"bootstrapping-the-restful-api\">Puesta en marcha de la API RESTful<\/h3>\n<p>Con el <strong>app.js<\/strong> creado, \u00e1bralo e incluya el siguiente c\u00f3digo JavaScript:<\/p>\n<pre><code>var Express = require(\"express\");\r\nvar BodyParser = require(\"body-parser\");\r\nvar PouchDB = require(\"pouchdb\");\r\n\r\nvar app = Express();\r\n\r\napp.use(BodyParser.json());\r\napp.use(BodyParser.urlencoded({ extended: true }));\r\n\r\nvar database = new PouchDB(\"https:\/\/192.168.57.1:4984\/example\");\r\n\r\napp.get(\"\/people\", function(req, res) { });\r\n\r\napp.get(\"\/people\/:id\", function(req, res) { });\r\n\r\napp.post(\"\/people\", function(req, res) { });\r\n\r\napp.delete(\"\/people\", function(req, res) { });\r\n\r\nvar server = app.listen(3000, function() {\r\n    database.info().then(function(info) {\r\n        console.log(info);\r\n        console.log(\"Listening on port %s...\", server.address().port);\r\n    });\r\n});<\/code><\/pre>\n<p>Entonces, \u00bfqu\u00e9 est\u00e1 pasando en el c\u00f3digo anterior? En primer lugar estamos importando las dependencias que fueron instaladas previamente y las estamos inicializando.<\/p>\n<p>Debido a que esta es una aplicaci\u00f3n del lado del servidor tenemos dos opciones cuando se trata de utilizar PouchDB. Podr\u00edamos crear una base de datos local en nuestro servidor de aplicaciones que se sincroniza con Sync Gateway o podemos conectarnos a la instancia de Sync Gateway directamente.<\/p>\n<pre><code>var database = new PouchDB(\"https:\/\/192.168.57.1:4984\/example\");<\/code><\/pre>\n<p>Lo anterior indica que vamos a conectarnos directamente a nuestro servidor Sync Gateway que se ejecuta localmente. Puede elegir la opci\u00f3n de sincronizaci\u00f3n si desea adoptar un enfoque diferente en el equilibrio de carga.<\/p>\n<pre><code>app.get(\"\/people\", function(req, res) { });\r\napp.get(\"\/people\/:id\", function(req, res) { });\r\napp.post(\"\/people\", function(req, res) { });\r\napp.delete(\"\/people\", function(req, res) { });<\/code><\/pre>\n<p>Vamos a construir una API RESTful que utiliza CRUD, pero por ahora tiene sentido definir cada uno de los puntos finales que deseamos utilizar en Express Framework.<\/p>\n<p>Por \u00faltimo, definimos c\u00f3mo queremos servir la aplicaci\u00f3n:<\/p>\n<pre><code>var server = app.listen(3000, function() {\r\n    database.info().then(function(info) {\r\n        console.log(info);\r\n        console.log(\"Listening on port %s...\", server.address().port);\r\n    });\r\n});<\/code><\/pre>\n<p>Vamos a servir la aplicaci\u00f3n en https:\/\/localhost:3000 y cuando el servidor arranque imprimiremos informaci\u00f3n relativa a PouchDB. Nos servir\u00e1 para hacernos una idea sobre la conexi\u00f3n y los datos que existen.<\/p>\n<h3 id=\"including-the-pouchdb-data-manipulation-logic\">Incluida la l\u00f3gica de manipulaci\u00f3n de datos de PouchDB<\/h3>\n<p>Con la aplicaci\u00f3n arrancada, podemos empezar a aplicar la l\u00f3gica de la aplicaci\u00f3n a cada uno de los m\u00e9todos del endpoint. Comenzando con el punto final de la lista, tenemos lo siguiente:<\/p>\n<pre><code>app.get(\"\/people\", function(req, res) {\r\n    database.allDocs({include_docs: true}).then(function(result) {\r\n        res.send(result.rows.map(function(item) {\r\n            return item.doc;\r\n        }));\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});<\/code><\/pre>\n<p>Cuando el endpoint es alcanzado, consultaremos todos los documentos e incluiremos las propiedades del documento en los resultados. Para omitir informaci\u00f3n que podr\u00eda no sernos \u00fatil podemos mapear la respuesta antes de devolverla, de lo contrario podemos devolver un error.<\/p>\n<p>En lugar de listar todos los documentos podemos querer obtener un \u00fanico documento.<\/p>\n<pre><code>app.get(\"\/people\/:id\", function(req, res) {\r\n    if(!req.params.id) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"An `id` is required\"});\r\n    }\r\n    database.get(req.params.id).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});<\/code><\/pre>\n<p>En el escenario anterior esperamos que se incluya un id de documento en la petici\u00f3n. Si el id existe intentaremos obtener un documento y devolv\u00e9rselo al solicitante, de lo contrario devolveremos un error.<\/p>\n<p>\u00bfY la creaci\u00f3n de nuevos documentos?<\/p>\n<p>Para crear documentos dentro de Couchbase, har\u00edamos algo como lo siguiente:<\/p>\n<pre><code>app.post(\"\/people\", function(req, res) {\r\n    if(!req.body.firstname) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"A `firstname` is required\"});\r\n    } else if(!req.body.lastname) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"A `lastname` is required\"});\r\n    }\r\n    database.post(req.body).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});<\/code><\/pre>\n<p>En el c\u00f3digo anterior esperamos un <code>nombre<\/code> y un <code>apellido<\/code> exista. Si esto es cierto, crearemos el documento usando todo el cuerpo de la entrada y devolveremos la respuesta. No tenemos que usar todo el cuerpo de la entrada, pero en este ejemplo s\u00ed. Tenga en cuenta que esto s\u00f3lo crear\u00e1 un documento, no actualizar\u00e1 el documento. La actualizaci\u00f3n de los documentos utilizar\u00eda un <code>poner<\/code> en lugar de un m\u00e9todo <code>Correo electr\u00f3nico:<\/code> m\u00e9todo.<\/p>\n<p>La parte final de nuestra aplicaci\u00f3n es el punto final para borrar datos.<\/p>\n<pre><code>app.delete(\"\/people\", function(req, res) {\r\n    if(!req.body.id) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"An `id` is required\"});\r\n    }\r\n    database.get(req.body.id).then(function(result) {\r\n        return database.remove(result);\r\n    }).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});<\/code><\/pre>\n<p>Esperamos que se introduzca un identificador en la solicitud. Si este id existe, primero hacemos una b\u00fasqueda para asegurarnos de que el documento existe. Si el documento existe, podemos borrarlo. Todo esto se logra encadenando promesas JavaScript.<\/p>\n<h3 id=\"trying-the-finished-project-source-code\">Probar el c\u00f3digo fuente del proyecto terminado<\/h3>\n<p>Si quieres tener una idea m\u00e1s clara de c\u00f3mo es esta aplicaci\u00f3n, a continuaci\u00f3n puedes ver el c\u00f3digo completo.<\/p>\n<pre><code>var Express = require(\"express\");\r\nvar BodyParser = require(\"body-parser\");\r\nvar PouchDB = require(\"pouchdb\");\r\n\r\nvar app = Express();\r\n\r\napp.use(BodyParser.json());\r\napp.use(BodyParser.urlencoded({ extended: true }));\r\n\r\nvar database = new PouchDB(\"https:\/\/192.168.57.1:4984\/example\");\r\n\r\napp.get(\"\/people\", function(req, res) {\r\n    database.allDocs({include_docs: true}).then(function(result) {\r\n        res.send(result.rows.map(function(item) {\r\n            return item.doc;\r\n        }));\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});\r\n\r\napp.get(\"\/people\/:id\", function(req, res) {\r\n    if(!req.params.id) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"An `id` is required\"});\r\n    }\r\n    database.get(req.params.id).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});\r\n\r\napp.post(\"\/people\", function(req, res) {\r\n    if(!req.body.firstname) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"A `firstname` is required\"});\r\n    } else if(!req.body.lastname) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"A `lastname` is required\"});\r\n    }\r\n    database.post(req.body).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});\r\n\r\napp.delete(\"\/people\", function(req, res) {\r\n    if(!req.body.id) {\r\n        return res.status(400).send({\"status\": \"error\", \"message\": \"An `id` is required\"});\r\n    }\r\n    database.get(req.body.id).then(function(result) {\r\n        return database.remove(result);\r\n    }).then(function(result) {\r\n        res.send(result);\r\n    }, function(error) {\r\n        res.status(400).send(error);\r\n    });\r\n});\r\n\r\nvar server = app.listen(3000, function() {\r\n    database.info().then(function(info) {\r\n        console.log(info);\r\n        console.log(\"Listening on port %s...\", server.address().port);\r\n    });\r\n});<\/code><\/pre>\n<p>Para ejecutar la aplicaci\u00f3n debe ejecutar <code>node app.js<\/code> desde tu Terminal o Command Prompt y luego pulsa los endpoints de https:\/\/localhost:3000 desde cURL o la aplicaci\u00f3n que prefieras.<\/p>\n<h2 id=\"conclusion\">Conclusi\u00f3n<\/h2>\n<p>Acabas de ver c\u00f3mo incluir PouchDB en una aplicaci\u00f3n web Node.js del lado del servidor donde PouchDB se comunica con una base de datos NoSQL Couchbase. Este fue uno de los muchos ejemplos diferentes de c\u00f3mo puedes incluir m\u00f3vil y servidor en la misma pila porque Sync Gateway est\u00e1 sentado en el medio. En una <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-couchbase-server-and-couchbase-mobile-in-the-same-project-with-nodejs\/\">entrada anterior<\/a> Escrib\u00ed sobre el uso de la API RESTful de Sync Gateway en lugar de PouchDB. Ese ejemplo tambi\u00e9n demostr\u00f3 el uso m\u00f3vil y de servidor con Couchbase.<\/p>","protected":false},"excerpt":{"rendered":"<p>One of my preferred technologies for developing web applications is Node.js. I do a lot of JavaScript development, so it is another piece to fit in my development puzzle. Not too long ago I wrote a guide for using Couchbase [&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":[1815,1810,1816,9327,1822,2366],"tags":[1543,1541],"ppma_author":[9032],"class_list":["post-2478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-mobile","category-couchbase-server","category-javascript","category-node-js","category-sync-gateway","tag-javascript","tag-pouchdb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using PouchDB and Couchbase NoSQL in Your Node.js Web Application - The Couchbase Blog<\/title>\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\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application\" \/>\n<meta property=\"og:description\" content=\"One of my preferred technologies for developing web applications is Node.js. I do a lot of JavaScript development, so it is another piece to fit in my development puzzle. Not too long ago I wrote a guide for using Couchbase [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\" \/>\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=\"2017-01-10T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:22:44+00:00\" \/>\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=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application\",\"datePublished\":\"2017-01-10T15:00:00+00:00\",\"dateModified\":\"2025-06-14T04:22:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\"},\"wordCount\":1172,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"javascript\",\"pouchdb\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Mobile\",\"Couchbase Server\",\"JavaScript\",\"Node.js\",\"Sync Gateway\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\",\"name\":\"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-10T15:00:00+00:00\",\"dateModified\":\"2025-06-14T04:22:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#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\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application\"}]},{\"@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":"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application - The Couchbase Blog","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\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/","og_locale":"es_MX","og_type":"article","og_title":"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application","og_description":"One of my preferred technologies for developing web applications is Node.js. I do a lot of JavaScript development, so it is another piece to fit in my development puzzle. Not too long ago I wrote a guide for using Couchbase [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-01-10T15:00:00+00:00","article_modified_time":"2025-06-14T04:22:44+00:00","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":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application","datePublished":"2017-01-10T15:00:00+00:00","dateModified":"2025-06-14T04:22:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/"},"wordCount":1172,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["javascript","pouchdb"],"articleSection":["Best Practices and Tutorials","Couchbase Mobile","Couchbase Server","JavaScript","Node.js","Sync Gateway"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/","url":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/","name":"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-10T15:00:00+00:00","dateModified":"2025-06-14T04:22:44+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#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\/using-pouchdb-and-couchbase-nosql-in-your-nodejs-web-application\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using PouchDB and Couchbase NoSQL in Your Node.js Web Application"}]},{"@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\/2478","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=2478"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2478\/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=2478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2478"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}