{"id":2494,"date":"2017-01-19T21:43:59","date_gmt":"2017-01-19T21:43:58","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2494"},"modified":"2025-10-09T07:23:21","modified_gmt":"2025-10-09T14:23:21","slug":"node-js-swagger-monitor-document-changes-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/node-js-swagger-monitor-document-changes-couchbase-mobile\/","title":{"rendered":"Uso de Node.js y Swagger para monitorizar cambios en documentos en Couchbase Mobile"},"content":{"rendered":"<div style=\"overflow: auto\">\n<div style=\"float: left;width: 50%\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-392\" src=\"\/wp-content\/original-assets\/january-2017\/using-node.js-and-swagger-to-monitor-document-changes-in-couchbase-mobile\/node.js_logo.svg_.png\" alt=\"Node.js logo\" width=\"360\" height=\"220\" \/><\/div>\n<div style=\"float: left;width: 50%\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-408 alignnone\" src=\"\/wp-content\/original-assets\/january-2017\/using-node.js-and-swagger-to-monitor-document-changes-in-couchbase-mobile\/swagger-logo.png\" alt=\"Swagger Logo\" width=\"360\" height=\"360\" \/><\/div>\n<\/div>\n<p>Al crear aplicaciones con <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/mobile\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase M\u00f3vil<\/a> hay muchas posibilidades interesantes de integraci\u00f3n en el servidor.<br \/>\nLa creaci\u00f3n de l\u00f3gica de negocio para resolver conflictos de sincronizaci\u00f3n es un uso com\u00fan. El sitio <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/index.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">Pasarela de sincronizaci\u00f3n<\/a> tambi\u00e9n facilita la implementaci\u00f3n de todo tipo de operaciones basadas en eventos. Voy a explorar esto en los pr\u00f3ximos posts.<\/p>\n<p>Una aplicaci\u00f3n puede utilizar ambos <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/index.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">Pasarela de sincronizaci\u00f3n<\/a> y <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/couchbase-lite\/index.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase Lite<\/a> llamando directamente a la API ReST de cada uno. Sin embargo, eso requiere escribir un mont\u00f3n de c\u00f3digo repetitivo que no es muy divertido. PouchDB ofrece una opci\u00f3n compatible con JavaScript, pero ahora hay una alternativa m\u00e1s ligera.<\/p>\n<p>No hace mucho tiempo Couchbase cambi\u00f3 al uso de Swagger para documentar la aplicaci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/mobile\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase M\u00f3vil<\/a> APIs. Swagger hace mucho m\u00e1s que crear<br \/>\ndocumentaci\u00f3n. Con una sola especificaci\u00f3n Swagger, puedes generar documentaci\u00f3n, c\u00f3digo stub de servidor, casos de prueba, un sitio sandbox y mucho m\u00e1s. Lo mejor de todo para m\u00ed, Swagger puede generar SDKs de cliente... \u00a1en 40 idiomas diferentes!<\/p>\n<p>En este post, voy a mostrar c\u00f3mo usar el cliente Swagger Node.js. Construiremos una aplicaci\u00f3n super simple que monitoriza cambios en documentos en Couchbase. Esto se convertir\u00e1 en la base para la construcci\u00f3n de algunas otras cosas interesantes por venir. Vamos a sumergirnos.<\/p>\n<h2 id=\"what-we-ll-need\">Qu\u00e9 necesitaremos<\/h2>\n<p>Para seguirlo, querr\u00e1s<\/p>\n<ul>\n<li>Node.js (estoy usando v6.9.1 en un Mac)<\/li>\n<li>Swagger JS (El cliente Swagger Node.js)<\/li>\n<li>Pasarela de sincronizaci\u00f3n Couchbase<\/li>\n<li>La especificaci\u00f3n Sync Gateway Swagger<\/li>\n<\/ul>\n<p>Asumo que ya tienes instalado Node.js.<\/p>\n<h2 id=\"install-the-swagger-js-library\">Instalar la biblioteca Swagger JS<\/h2>\n<p>Desde un int\u00e9rprete de l\u00ednea de comandos, cambie al directorio donde guardar\u00e1 su proyecto.<\/p>\n<p>Para obtener el cliente Swagger y sus dependencias, ejecute<\/p>\n<pre><code class=\"language-bash\">$ npm install swagger-client<\/code><\/pre>\n<p>(Ver\u00e1s algunas advertencias, que puedes ignorar).<\/p>\n<h2 id=\"install-sync-gateway\">Instalar Sync Gateway<\/h2>\n<p>Descargue el paquete Sync Gateway para su plataforma <a href=\"https:\/\/www.couchbase.com\/blog\/es\/nosql-databases\/downloads\/#cb-mobile\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>. (Si utiliza Linux y no ve un paquete para su distribuci\u00f3n, consulte las instrucciones en<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/es\/installing-sync-gateway-alternate-linux-distributions\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">esta entrada del blog<\/a> en busca de ayuda).<\/p>\n<p>Para ejecutar Sync Gateway, necesitamos crear un archivo de configuraci\u00f3n. Aqu\u00ed hay una configuraci\u00f3n simple que podemos utilizar. Copie el texto aqu\u00ed y p\u00e9guelo en un archivo llamado \"sync-gateway-config.json\", o algo similar.<\/p>\n<pre><code class=\"language-json\">{\r\n  \"log\": [\"HTTP+\"],\r\n  \"adminInterface\": \"127.0.0.1:4985\",\r\n  \"interface\": \"127.0.0.1:4984\",\r\n  \"CORS\": {\r\n    \"origin\":[\"*\"],\r\n    \"loginorigin\":[\"*\"],\r\n    \"headers\":[\"Content-Type\"],\r\n    \"maxAge\": 1728000\r\n  },\r\n  \"databases\": {\r\n    \"test\": {\r\n      \"server\": \"walrus:\",\r\n      \"users\": { \"GUEST\": {\"disabled\": false, \"admin_channels\": [\"*\"] } }\r\n    }\r\n  }\r\n}<\/code><\/pre>\n<p>Esta configuraci\u00f3n utiliza una base de datos incorporada hecha para probar Sync Gateway. Adem\u00e1s, el servidor s\u00f3lo responder\u00e1 a conexiones en localhost. Al final de este art\u00edculo encontrar\u00e1 recursos para obtener m\u00e1s informaci\u00f3n sobre la configuraci\u00f3n de Sync Gateway.<\/p>\n<p>Inicie Sync Gateway ejecutando<\/p>\n<pre><code class=\"language-bash\">$ \/path\/to\/sync_gateway sync-gateway-config.json<\/code><\/pre>\n<p>Ver\u00e1s algunos registros de salida. Puede que te resulte interesante ver los registros cuando ejecutes la aplicaci\u00f3n m\u00e1s tarde.<\/p>\n<h2 id=\"make-a-copy-of-the-sync-gateway-swagger-spec\">Haga una copia de la especificaci\u00f3n Sync Gateway Swagger<\/h2>\n<p>Puede encontrar la especificaci\u00f3n Swagger para la APi p\u00fablica de Sync Gateway ReST (frente a la API de administraci\u00f3n) en <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/current\/_attachments\/sync-gateway-admin.yaml\">https:\/\/docs.couchbase.com\/sync-gateway\/current\/_attachments\/sync-gateway-admin.yaml<\/a>.<\/p>\n<p>Las especificaciones Swagger se almacenan como JSON. Aunque Swagger puede descargar el texto directamente, es mejor hacer una copia. As\u00ed, si la especificaci\u00f3n cambia, no se romper\u00e1 tu aplicaci\u00f3n.<\/p>\n<p>Copia la informaci\u00f3n en un archivo del directorio de tu proyecto llamado sync-gateway-spec.json, o algo similar. El archivo necesita una extensi\u00f3n .json para que Node pueda procesarlo.<\/p>\n<h2 id=\"create-the-node-js-app\">Crear la aplicaci\u00f3n Node.js<\/h2>\n<p>Vamos a montar la aplicaci\u00f3n. Abre un nuevo archivo en el directorio de tu proyecto que termine con una extensi\u00f3n .js. Yo us\u00e9 un archivo llamado app.js.<\/p>\n<pre><code class=\"language-JavaScript\">const Swagger = require('swagger-client');\r\nconst spec = require('.\/sync-gateway-spec.json');<\/code><\/pre>\n<p>La primera l\u00ednea importa el cliente Swagger y lo hace disponible. La segunda l\u00ednea es un poco m\u00e1s inusual. Inicializa el cliente <code>spec<\/code> a partir del JSON del archivo. Por eso es importante la extensi\u00f3n .json. As\u00ed es como Node reconoce que estamos<br \/>\nimportando JSON, no un paquete normal.<\/p>\n<p>El archivo de especificaciones tiene un host incorporado, pero vamos a configurarlo nosotros mismos.<\/p>\n<pre><code class=\"language-JavaScript\">const SYNC_GATEWAY_HOST = 'localhost:4984';\r\n\r\nspec.host = SYNC_GATEWAY_HOST;\r\n<\/code><\/pre>\n<p>A continuaci\u00f3n, prepararemos los par\u00e1metros para nuestra llamada a la funci\u00f3n <code>_cambios<\/code> punto final.<\/p>\n<pre><code class=\"language-JavaScript\">let query = {\r\n  db: 'test',\r\n  filter: 'sync_gateway\/bychannel',\r\n  channels: 'notification',\r\n  active_only: true,\r\n  include_docs: true,\r\n  feed: 'longpoll',\r\n  timeout: 0\r\n};<\/code><\/pre>\n<p>F\u00edjate que aqu\u00ed tenemos una mezcla del nombre de la base de datos (test), que acaba siendo parte de la URL del endpoint, y algunas opciones que queremos configurar.<\/p>\n<p>Ahora que hemos inicializado lo que necesitamos, podemos crear la instancia del cliente Swagger.<\/p>\n<pre><code class=\"language-JavaScript\">let client = new Swagger({\r\n  spec: spec,\r\n  success: function() {\r\n    monitor(client);\r\n  },\r\n  function(error) {\r\n    console.log('client error: ', error.statusText);\r\n    process.exit(1);\r\n  }\r\n});<\/code><\/pre>\n<p>Hay varias cosas importantes que se\u00f1alar aqu\u00ed.<\/p>\n<p>Estamos usando el cliente sincr\u00f3nicamente. Si quieres, puedes usar JavaScript Promises especificando <code>usePromise: true<\/code>. No quer\u00eda hacer eso ya que no estoy haciendo ning\u00fan procesamiento real y complica el c\u00f3digo un poco.<\/p>\n<p>En lugar de <code>spec: spec<\/code>podr\u00edamos haber listado una url para la especificaci\u00f3n Swagger usando <code>url:<\/code>. De nuevo, deber\u00edas evitar esto, al menos en producci\u00f3n, porque la especificaci\u00f3n podr\u00eda cambiar remotamente y romper tu c\u00f3digo.<\/p>\n<p>En <code>\u00e9xito:<\/code> especifica dos funciones. Ambas son retrollamadas. La primera es llamada si la construcci\u00f3n tiene \u00e9xito, la segunda si falla. Estas son \"globales\", en cierto sentido. Estas funciones act\u00faan como predeterminadas si no especificamos otras diferentes a la funci\u00f3n<br \/>\nllamadas individuales. Eso es muy \u00fatil en caso de error.<\/p>\n<p>Asignamos la instancia a una variable <code>cliente<\/code>. La instancia de cliente se rellena de forma as\u00edncrona. No est\u00e1 lista para su uso hasta que se produce la llamada de retorno de \u00e9xito. As\u00ed que tenemos la interesante construcci\u00f3n que <code>cliente<\/code> se utiliza internamente en el<br \/>\ncallback. En la versi\u00f3n Promises, el cliente se pasar\u00eda como argumento en el m\u00e9todo <code>.entonces<\/code> cl\u00e1usula.<\/p>\n<p>En la siguiente parte del c\u00f3digo, utilizamos el cliente para escuchar el mensaje <code>_cambios<\/code> punto final.<\/p>\n<pre><code class=\"language-JavaScript\">function monitor(client) {\r\n  client.database.get_db_changes(query, message);\r\n}<\/code><\/pre>\n<p>Esto plantea un problema: \u00bfc\u00f3mo averiguamos el nombre de la funci\u00f3n a la que queremos llamar? No hay una correspondencia fija entre los puntos finales y los nombres de las funciones. Esta es otra caracter\u00edstica \u00fatil de Swagger. La clase cliente se documenta por s\u00ed misma. Puedes llamar a <code>ayuda()<\/code> en el nivel que necesites. Por ejemplo, para conocer los endpoints bajo base de datos, a\u00f1ade esto en tu c\u00f3digo:<\/p>\n<pre><code class=\"language-JavaScript\">client.database.help();<\/code><\/pre>\n<p>La ayuda aparece en la l\u00ednea de comandos (o en la consola de su IDE). Describir\u00e1 los puntos finales y todos los par\u00e1metros posibles.<\/p>\n<p>Volviendo a la llamada al cliente, vemos que pasamos tanto el nombre de la base de datos (obligatorio), como varios par\u00e1metros agrupados en el campo <code>consulta<\/code> objeto. Esto es un poco confuso. Usted podr\u00eda esperar que estos se separan, pero que no<br \/>\ntrabajo. Ninguno de los ejemplos que encontr\u00e9 lo explicaba.<\/p>\n<p>Proporcionamos una funci\u00f3n de devoluci\u00f3n de llamada <code>mensaje<\/code>. (Observe que se utiliza si la llamada ReST tiene \u00e9xito. Confiamos en el valor por defecto para manejar los fallos).<\/p>\n<pre><code class=\"language-JavaScript\">function message(response) {\r\n  console.log(response.data);\r\n  query.since = response.obj.last_seq;\r\n  monitor(client);\r\n}<\/code><\/pre>\n<p>El callback recibe un objeto que contiene todos los detalles de la respuesta. S\u00f3lo escrib\u00ed esta aplicaci\u00f3n para mostrar la estructura de bucle necesaria para escuchar la fuente de cambios Sync Gateway. Por lo tanto, el bucle <code>mensaje<\/code> no hace mucho. Escribimos la llamada<br \/>\ncon fines de depuraci\u00f3n. A continuaci\u00f3n, queremos volver y escuchar la siguiente actualizaci\u00f3n. Sync Gateway sabe qu\u00e9 enviar en funci\u00f3n de los identificadores de secuencia. Para controlar eso, usamos la funci\u00f3n <code>\u00faltima_seq<\/code> informaci\u00f3n de nuestra \u00faltima respuesta.<\/p>\n<p>Ya est\u00e1. Aqu\u00ed est\u00e1 el c\u00f3digo completo de la aplicaci\u00f3n.<\/p>\n<pre><code class=\"language-JavaScript\">const Swagger = require('swagger-client');\r\nconst spec = require('.\/sync-gateway-spec.json');\r\n\r\nconst SYNC_GATEWAY_HOST = 'localhost:4984';\r\n\r\nspec.host = SYNC_GATEWAY_HOST;\r\n\r\nlet query = {\r\n  db: 'test',\r\n  filter: 'sync_gateway\/bychannel',\r\n  channels: 'notification',\r\n  active_only: true,\r\n  include_docs: true,\r\n  feed: 'longpoll',\r\n  timeout: 0\r\n};\r\n\r\nlet client = new Swagger({\r\n  spec: spec,\r\n  success: function() {\r\n    monitor(client);\r\n  },\r\n  function(error) {\r\n    console.log('client error: ', error.statusText);\r\n    process.exit(1);\r\n  }\r\n});\r\n\r\nfunction monitor(client) {\r\n  client.database.get_db_changes(query, message);\r\n}\r\n\r\nfunction message(response) {\r\n  console.log(response.data);\r\n  query.since = response.obj.last_seq;\r\n  monitor(client);\r\n}<\/code><\/pre>\n<h2 id=\"final-notes\">Notas finales<\/h2>\n<p>Puede iniciar su aplicaci\u00f3n y probarla. Aseg\u00farese de que Sync Gateway se est\u00e1 ejecutando. A continuaci\u00f3n, ejecute<\/p>\n<pre><code class=\"language-bash\">$ node app.js<\/code><\/pre>\n<p>Deber\u00eda ver una respuesta en los registros de Sync Gateway y algo parecido a esto en la propia aplicaci\u00f3n:<\/p>\n<pre><code class=\"language-JSON\">{\"results\":[\r\n{\"seq\":1,\"id\":\"_user\/GUEST\",\"changes\":[]}\r\n],\r\n\"last_seq\":\"1\"}<\/code><\/pre>\n<p>Ahora, a\u00f1ade un nuevo documento. Puedes hacerlo con cURL en la l\u00ednea de comandos. Aqu\u00ed tienes un ejemplo.<\/p>\n<pre><code class=\"language-bash\">$ curl -X PUT -H \"Content-Type: application\/json\" -d '{ \"key\": \"value\", \"channels\": \"notification\" }' https:\/\/localhost:4984\/test\/doc<\/code><\/pre>\n<p>Tu aplicaci\u00f3n Node deber\u00eda mostrar algo como esto:<\/p>\n<pre><code class=\"language-JSON\">{\"results\":[\r\n{\"seq\":2,\"id\":\"doc\",\"doc\":{\"_id\":\"doc\",\"_rev\":\"1-d0efa985de274451fc7cdcf471152ce2\",\"channels\":\"notification\",\"key\":\"value\"},\"changes\":[{\"rev\":\"1-d0efa985de274451fc7cdcf471152ce2\"}]}\r\n],\r\n\"last_seq\":\"2\"}<\/code><\/pre>\n<h3 id=\"other-resources\">Otros recursos<\/h3>\n<p>M\u00e1s informaci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/mobile\/\">Couchbase M\u00f3vil<\/a>.<\/p>\n<p>Lea sobre la <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/index.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">Pasarela de sincronizaci\u00f3n<\/a> <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/references\/sync-gateway\/rest-api\/index.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">API ReST<\/a>.<\/p>\n<p>En <a href=\"https:\/\/github.com\/swagger-api\/swagger-js\" target=\"_blank\" rel=\"noopener noreferrer\">Repositorio GitHub del cliente Swagger JS<\/a> incluye documentaci\u00f3n \u00fatil.<\/p>\n<p>M\u00e1s informaci\u00f3n sobre Swagger en <a href=\"https:\/\/swagger.io\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/swagger.io<\/a>.<\/p>\n<p>El editor Swagger en l\u00ednea es realmente \u00fatil. Puedes generar SDKs de cliente aqu\u00ed, o incluso probar la API directamente. Solo tienes que pegar la especificaci\u00f3n Swagger en el editor. <a href=\"https:\/\/editor.swagger.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/editor.swagger.io\/<\/a><\/p>\n<p>Hay un proyecto de la comunidad React Native Couchbase que utiliza el cliente JavaScript. Puedes encontrar algunos ejemplos interesantes en <a href=\"https:\/\/github.com\/couchbaselabs\/react-native-couchbase-lite\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/couchbaselabs\/react-native-couchbase-lite<\/a><\/p>\n<h2 id=\"postscript\">Posdata<\/h2>\n<p>Consulte m\u00e1s recursos en nuestra <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/community\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">portal para desarrolladores<\/a> y s\u00edganos en Twitter <a href=\"https:\/\/twitter.com\/CouchbaseDev\" target=\"_blank\" rel=\"noopener noreferrer\">@CouchbaseDev<\/a>.<\/p>\n<p>Puede enviar preguntas a nuestro <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" target=\"_blank\" rel=\"noopener noreferrer\">foros<\/a>. Y participamos activamente en <a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\" target=\"_blank\" rel=\"noopener noreferrer\">Stack Overflow<\/a>.<\/p>\n<p>Puede seguirme personalmente en <a href=\"https:\/\/twitter.com\/HodGreeley\" target=\"_blank\" rel=\"noopener noreferrer\">@HodGreeley<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>When building applications with Couchbase Mobile there are a lot of interesting possibilities for server-side integration. Creating business logic to resolve synchronization conflicts is one common use. The Sync Gateway document \u201cchanges\u201d feed makes all sorts of event-driven operations easy [&hellip;]<\/p>","protected":false},"author":73,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1810,1822],"tags":[1790],"ppma_author":[9042],"class_list":["post-2494","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-mobile","category-node-js","tag-swagger"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"This article shows how to use the Swagger Node.js client. Learn how to build a super simple app that monitors changes in documents in Couchbase.\" \/>\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\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"This article shows how to use the Swagger Node.js client. Learn how to build a super simple app that monitors changes in documents in Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-19T21:43:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:23:21+00:00\" \/>\n<meta name=\"author\" content=\"Hod Greeley, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HodGreeley\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hod Greeley, 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\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\"},\"author\":{\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4\"},\"headline\":\"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile\",\"datePublished\":\"2017-01-19T21:43:58+00:00\",\"dateModified\":\"2025-10-09T14:23:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\"},\"wordCount\":1313,\"commentCount\":11,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Swagger\"],\"articleSection\":[\"Couchbase Mobile\",\"Node.js\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\",\"name\":\"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-19T21:43:58+00:00\",\"dateModified\":\"2025-10-09T14:23:21+00:00\",\"description\":\"This article shows how to use the Swagger Node.js client. Learn how to build a super simple app that monitors changes in documents in Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#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\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile\"}]},{\"@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\/9b62593c8a13531e53d52fcd5aabbca4\",\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"caption\":\"Hod Greeley, Developer Advocate, Couchbase\"},\"description\":\"Hod Greeley is a Developer Advocate for Couchbase, living in Silicon Valley. He has over two decades of experience as a software engineer and engineering manager. He has worked in a variety of software fields, including computational physics and chemistry, computer and network security, finance, and mobile. Prior to joining Couchbase in 2016, Hod led developer relations for mobile at Samsung. Hod holds a Ph.D. in chemical physics from Columbia University.\",\"sameAs\":[\"https:\/\/hod.greeley.org\/blog\",\"https:\/\/x.com\/HodGreeley\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/hod-greeley\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile - The Couchbase Blog","description":"Este art\u00edculo muestra c\u00f3mo usar el cliente Swagger Node.js. Aprende a construir una app super sencilla que monitoriza cambios en documentos en Couchbase.","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\/node-js-swagger-monitor-document-changes-couchbase-mobile\/","og_locale":"es_MX","og_type":"article","og_title":"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile","og_description":"This article shows how to use the Swagger Node.js client. Learn how to build a super simple app that monitors changes in documents in Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/node-js-swagger-monitor-document-changes-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-19T21:43:58+00:00","article_modified_time":"2025-10-09T14:23:21+00:00","author":"Hod Greeley, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@HodGreeley","twitter_misc":{"Written by":"Hod Greeley, Developer Advocate, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/"},"author":{"name":"Hod Greeley, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4"},"headline":"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile","datePublished":"2017-01-19T21:43:58+00:00","dateModified":"2025-10-09T14:23:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/"},"wordCount":1313,"commentCount":11,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Swagger"],"articleSection":["Couchbase Mobile","Node.js"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/","name":"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-19T21:43:58+00:00","dateModified":"2025-10-09T14:23:21+00:00","description":"Este art\u00edculo muestra c\u00f3mo usar el cliente Swagger Node.js. Aprende a construir una app super sencilla que monitoriza cambios en documentos en Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#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\/node-js-swagger-monitor-document-changes-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Node.js and Swagger to Monitor Document Changes in Couchbase Mobile"}]},{"@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\/9b62593c8a13531e53d52fcd5aabbca4","name":"Hod Greeley, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87","url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","caption":"Hod Greeley, Developer Advocate, Couchbase"},"description":"Hod Greeley es desarrollador de Couchbase y vive en Silicon Valley. Tiene m\u00e1s de dos d\u00e9cadas de experiencia como ingeniero de software y director de ingenier\u00eda. Ha trabajado en una variedad de campos de software, incluyendo f\u00edsica computacional y qu\u00edmica, seguridad inform\u00e1tica y de redes, finanzas y m\u00f3viles. Antes de unirse a Couchbase en 2016, Hod dirigi\u00f3 las relaciones con desarrolladores para m\u00f3viles en Samsung. Hod es doctor en f\u00edsica qu\u00edmica por la Universidad de Columbia.","sameAs":["https:\/\/hod.greeley.org\/blog","https:\/\/x.com\/HodGreeley"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/hod-greeley\/"}]}},"authors":[{"term_id":9042,"user_id":73,"is_guest":0,"slug":"hod-greeley","display_name":"Hod Greeley, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","author_category":"","last_name":"Greeley","first_name":"Hod","job_title":"","user_url":"https:\/\/hod.greeley.org\/blog","description":"Hod Greeley es desarrollador de Couchbase y vive en Silicon Valley. Tiene m\u00e1s de dos d\u00e9cadas de experiencia como ingeniero de software y director de ingenier\u00eda. Ha trabajado en una variedad de campos de software, incluyendo f\u00edsica computacional y qu\u00edmica, seguridad inform\u00e1tica y de redes, finanzas y m\u00f3viles. Antes de unirse a Couchbase en 2016, Hod dirigi\u00f3 las relaciones con desarrolladores para m\u00f3viles en Samsung. Hod es doctor en f\u00edsica qu\u00edmica por la Universidad de Columbia."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2494","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\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2494"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2494\/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=2494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2494"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}