{"id":2001,"date":"2015-11-04T23:14:35","date_gmt":"2015-11-04T23:14:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2001"},"modified":"2019-05-07T10:09:40","modified_gmt":"2019-05-07T17:09:40","slug":"exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/","title":{"rendered":"Explorando Couchbase y N1QL a trav\u00e9s de Touchbase usando Node.js y Angular.js - Parte 2: Verificaci\u00f3n de Email con Nodemailer, Sendgrid y Couchbase"},"content":{"rendered":"<h2>Parte 2: Verificaci\u00f3n del correo electr\u00f3nico<\/h2>\n<p>En esta tercera entrega de la construcci\u00f3n de Touchbase, voy a profundizar en la creaci\u00f3n de un sistema de verificaci\u00f3n de correo electr\u00f3nico utilizando Couchbase, nodemailer, y la API Web Sendgrid. Lo primero que necesitar\u00e1s hacer es descargar un par de m\u00f3dulos de node.<\/p>\n<p>Las dos primeras entregas, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/touchbase-part-0-creating-a-data-model\/\">Parte 0<\/a> y <a href=\"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-1-creating-a-user-document\/\">Parte 1<\/a>cubren el modelo de datos y la creaci\u00f3n de documentos de usuario, respectivamente.<\/p>\n<h4>Requisitos de la plataforma<\/h4>\n<ul>\n<li>Node.js<\/li>\n<li>Express.js<\/li>\n<li>Una cuenta API de Sendgrid<\/li>\n<li>Generador de correo electr\u00f3nico HTML O correo electr\u00f3nico HTML redactado a mano<\/li>\n<\/ul>\n<h4>M\u00f3dulos de nodo utilizados<\/h4>\n<ul>\n<li>Couchbase Node.js SDK\/N1QL (acceso a Couchbase)<\/li>\n<li>body-parser (convierte cadenas JSON en objetos JSON)<\/li>\n<li>uuid (para generar el ID del documento de verificaci\u00f3n)<\/li>\n<li>nodemailer (env\u00eda correos electr\u00f3nicos desde nuestra API de confirmaci\u00f3n de correo electr\u00f3nico)<\/li>\n<li>nodemailer-sendgrid-transport (enviar correos electr\u00f3nicos nodemailer a trav\u00e9s de Sendgrid)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>En primer lugar, para traer los m\u00f3dulos de nodo, hacer:<\/p>\n<pre><code>$ npm install nodemailer --save <\/code><\/pre>\n<p>Entonces:<\/p>\n<pre><code>$ npm install nodemailer-sendgrid-transport --save<\/code><\/pre>\n<p>Si no est\u00e1s familiarizado con Node, npm simplemente instala m\u00f3dulos por ti. La p\u00e1gina <strong>-guardar<\/strong> final a\u00f1adir\u00e1 estos m\u00f3dulos a su <strong>paquete.json<\/strong> archivo. En el repositorio github de Touchbase, ver\u00e1 que ya est\u00e1n en el archivo <strong>paquete.json<\/strong> archivo.<\/p>\n<p>En primer lugar, cree una cuenta Sendgrid para utilizar su <a href=\"https:\/\/sendgrid.com\/free\">API web gratuita<\/a>. Asumir\u00e9 que lo tiene y continuar\u00e9. Despu\u00e9s de eso, tendr\u00e1 que hacer una configuraci\u00f3n sencilla de la API de Sendgrid para enviar correos electr\u00f3nicos utilizando Sendgrid y nodemailer. La explicaci\u00f3n del uso de estos dos servicios juntos est\u00e1 en <a href=\"https:\/\/sendgrid.com\/blog\/sending-email-nodemailer-sendgrid\/\">Blog de Sendgrid<\/a> y voy a ir m\u00e1s all\u00e1 usando ese fragmento de c\u00f3digo. Mi uso de esto en el <strong>modelos\/sessionmodel.js<\/strong> en una funci\u00f3n llamada <strong>Sesi\u00f3n.makeVerification<\/strong>. El punto final al que se llama a esta funci\u00f3n se encuentra en <strong>rutas\/routes.js<\/strong> como <strong>\/api\/registerUser<\/strong>del que habl\u00e9 largo y tendido <a href=\"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-1-creating-a-user-document\/\">en mi \u00faltimo blog<\/a>. Esta funci\u00f3n se llama al final de esa ruta para generar un correo electr\u00f3nico de verificaci\u00f3n, que el usuario debe pulsar antes de iniciar sesi\u00f3n en su cuenta, para evitar abusos del servicio.<\/p>\n<p>En el <strong>models\/usermodel.js<\/strong> el archivo <strong>'Usuario.crear'<\/strong> tiene un campo booleano en el sub-objeto 'login' llamado 'emailVerified'. La importancia de esto, es que nuestra ruta de verificaci\u00f3n cambiar\u00e1 este atributo del usuario a true, permiti\u00e9ndole iniciar sesi\u00f3n si su email ha sido verificado.<\/p>\n<h4>Funci\u00f3n 'Session.makeVerification<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/94731f4fa31cdecf5923.js\"><\/script><\/p>\n<p>A continuaci\u00f3n, llamamos al <strong>Email.crear<\/strong> modelo. Si examina el <strong>models\/emailmodel.js<\/strong> ver\u00e1 un ejemplo de c\u00f3mo hacerlo. Esto simplemente hace uso de un <a href=\"https:\/\/www.accessify.com\/tools-and-wizards\/developer-tools\/html-javascript-convertor\/\">Conversor de cadenas HTML a Javascript<\/a> que genera una cadena Javascript que se convierte en un correo electr\u00f3nico HTML en la API de Sendgrid.<\/p>\n<p>En nuestra <strong>Sesi\u00f3n.makeVerification<\/strong> realizamos una configuraci\u00f3n b\u00e1sica para las API de nodemailer y Sendgrid. Introduzca las opciones, as\u00ed como un nombre de usuario y una contrase\u00f1a de API que se configuraron cuando cre\u00f3 su cuenta de Sendgrid. Eleg\u00ed utilizar la API de Sendgrid y no una cuenta de correo electr\u00f3nico personal con Nodemailer porque Sendgrid permite el seguimiento de todos los correos electr\u00f3nicos, y asegura que sean entregados a tiempo. Tambi\u00e9n garantizar\u00e1 que ninguno de los correos electr\u00f3nicos caiga en las papeleras de spam, filtros de promoci\u00f3n, etc. De esta forma, los emails se enviar\u00e1n de forma segura, y adem\u00e1s se podr\u00e1n aliasar con la direcci\u00f3n de email que deseemos. En este caso utilizo 'touchbase-noreply@couchbase.com' que no es un email oficial, pero mostrar\u00e1 claramente que el email es enviado desde Touchbase al usuario. Esto se puede hacer <a href=\"https:\/\/github.com\/andris9\/Nodemailer\">sin el usuario de la API Sendgrid<\/a> tambi\u00e9n.<\/p>\n<p>La siguiente parte de <strong>Sesi\u00f3n.makeVerification<\/strong> nos lleva a <strong>Email.create<\/strong> para construir la plantilla HTML de los correos electr\u00f3nicos que enviaremos a los usuarios, que llama a una funci\u00f3n en <strong>models\/emailmodel.js<\/strong>. Si se fija bien, esta funci\u00f3n toma un archivo de correo electr\u00f3nico HTML y lo convierte en una cadena Javascript. La generaci\u00f3n de correos electr\u00f3nicos HTML es un poco diferente de los archivos HTML, como se explica en <a href=\"https:\/\/blog.mailchimp.com\/guide-to-creating-custom-mailchimp-email-templates\/\">este gran art\u00edculo de mailchimp<\/a>. Luego utilic\u00e9 un generador de cadenas de HTML a Javascript para devolver la cadena en el campo <strong>Email.create<\/strong> que se utiliza como HTML para el correo electr\u00f3nico de nodemailer. Paso el objeto req de la funci\u00f3n <strong>Sesi\u00f3n.makeVerification<\/strong> a esta funci\u00f3n, para que pueda generar la URL que se utiliz\u00f3 para acceder a la p\u00e1gina. De esta forma, si alguien cambiara el dominio del sitio, o la direcci\u00f3n IP en la que estaba realizando la prueba, se generar\u00eda de forma consistente la URL correcta para el correo electr\u00f3nico de verificaci\u00f3n. El lugar donde se cambia esta URL es el 'href' para el bot\u00f3n 'Verificar' de la p\u00e1gina HTML, de modo que cuando hagan clic en el enlace, se les env\u00ede a la URL de su ID de verificaci\u00f3n en <strong>\/api\/verify\/:verificationID<\/strong>. Puede ver esta API en el <strong>rutas\/routes.js<\/strong> archivo.<\/p>\n<h4>API '\/api\/verify\/:verificationID<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/545fc36282d17dce59d9.js\"><\/script><\/p>\n<p>A trav\u00e9s de esta funci\u00f3n, finalmente enviamos la verificaci\u00f3n de correo electr\u00f3nico, por lo que el usuario deber\u00e1 verificar el correo electr\u00f3nico antes de poder acceder a su cuenta. El bot\u00f3n de verificaci\u00f3n de correo electr\u00f3nico del usuario lo vincular\u00e1 a la <strong>api\/verify\/:verificationID<\/strong> donde la API tomar\u00e1 el ID de verificaci\u00f3n, como <strong>req.params.verificationID<\/strong>. A continuaci\u00f3n, enviar\u00e1 esto a una funci\u00f3n llamada <strong>Sesi\u00f3n.verificar<\/strong> en <strong>modelos\/sessionmodel.js<\/strong>. Esta funci\u00f3n toma este verificationID, y comprueba que existe. A continuaci\u00f3n, cambia el estado del documento de usuario del usuario asociado, y establece su atributo 'login.emailVerified' a true, permitiendo al usuario iniciar sesi\u00f3n. Finalmente, borra el documento de verificaci\u00f3n completando el proceso de registro y configurando la aplicaci\u00f3n para permitir al usuario iniciar sesi\u00f3n.<\/p>\n<h4>Funci\u00f3n \"Session.verify<\/h4>\n<p><script src=\"https:\/\/gist.github.com\/pranavmayuram\/22bdd9bbedb0920e88d5.js\"><\/script><\/p>\n<p>Para resumir, cubrimos c\u00f3mo Touchbase genera documentos para el proceso de verificaci\u00f3n de correo electr\u00f3nico, genera el correo HTML para el usuario y luego actualiza el perfil del usuario una vez que la verificaci\u00f3n ha sido completada. Si tiene alguna pregunta o comentario, por favor com\u00e9ntelo a continuaci\u00f3n.<\/p>","protected":false},"excerpt":{"rendered":"<p>Part 2: Email Verification In this third installment of building Touchbase, I will go in depth about creating an email verification system using Couchbase, nodemailer, and the Sendgrid Web API. The first thing you will need to do is download [&hellip;]<\/p>","protected":false},"author":60,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9034],"class_list":["post-2001","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Email Verification with Nodemailer, Sendgrid &amp; Couchbase<\/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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase\" \/>\n<meta property=\"og:description\" content=\"Part 2: Email Verification In this third installment of building Touchbase, I will go in depth about creating an email verification system using Couchbase, nodemailer, and the Sendgrid Web API. The first thing you will need to do is download [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-04T23:14:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-07T17:09:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pranav Mayuram\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pranav Mayuram\" \/>\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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\"},\"author\":{\"name\":\"Pranav Mayuram\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/454261061bad5159ad2696e0bf162eaa\"},\"headline\":\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase\",\"datePublished\":\"2015-11-04T23:14:34+00:00\",\"dateModified\":\"2019-05-07T17:09:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\"},\"wordCount\":950,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\",\"name\":\"Email Verification with Nodemailer, Sendgrid & Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-11-04T23:14:34+00:00\",\"dateModified\":\"2019-05-07T17:09:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase\"}]},{\"@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\/454261061bad5159ad2696e0bf162eaa\",\"name\":\"Pranav Mayuram\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/61baa4ff0f18aa9a8ce672f0f97f1ac0\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g\",\"caption\":\"Pranav Mayuram\"},\"description\":\"Pranav Mayuram is a N1QL Query language intern, Couchbase. Built a social network platform, Touchbase, using Couchbase Server, Node.js, Express &amp; Angular.js.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/pranav-mayuram\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Email Verification with Nodemailer, Sendgrid & 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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/","og_locale":"es_MX","og_type":"article","og_title":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase","og_description":"Part 2: Email Verification In this third installment of building Touchbase, I will go in depth about creating an email verification system using Couchbase, nodemailer, and the Sendgrid Web API. The first thing you will need to do is download [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-11-04T23:14:34+00:00","article_modified_time":"2019-05-07T17:09:40+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Pranav Mayuram","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Pranav Mayuram","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/"},"author":{"name":"Pranav Mayuram","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/454261061bad5159ad2696e0bf162eaa"},"headline":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase","datePublished":"2015-11-04T23:14:34+00:00","dateModified":"2019-05-07T17:09:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/"},"wordCount":950,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/","url":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/","name":"Email Verification with Nodemailer, Sendgrid & Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-11-04T23:14:34+00:00","dateModified":"2019-05-07T17:09:40+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#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\/exploring-couchbase-and-n1ql-through-touchbase-using-node-js-and-angular-js-part-2-email-verification\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Exploring Couchbase and N1QL through Touchbase using Node.js and Angular.js \u2013 Part 2: Email Verification with Nodemailer, Sendgrid and Couchbase"}]},{"@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\/454261061bad5159ad2696e0bf162eaa","name":"Pranav Mayuram","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/61baa4ff0f18aa9a8ce672f0f97f1ac0","url":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","caption":"Pranav Mayuram"},"description":"Pranav Mayuram es pasante de lenguaje de consulta N1QL, Couchbase. Construy\u00f3 una plataforma de red social, Touchbase, usando Couchbase Server, Node.js, Express &amp; Angular.js.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/pranav-mayuram\/"}]}},"authors":[{"term_id":9034,"user_id":60,"is_guest":0,"slug":"pranav-mayuram","display_name":"Pranav Mayuram","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/de8b1b457fdc2f5f8b407ef8bf0bfcacb1e2be0ab9de2cee8e8aa4ee7f985709?s=96&d=mm&r=g","first_name":"Pranav","last_name":"Mayuram","user_url":"","author_category":"","description":"Pranav Mayuram es pasante de lenguaje de consulta N1QL, Couchbase. Construy\u00f3 una plataforma de red social, Touchbase, usando Couchbase Server, Node.js, Express &amp; Angular.js."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2001","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\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2001"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2001\/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=2001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2001"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}