One place for hosting & domains

      predeterminados

      Cómo instalar MongoDB desde los repositorios APT predeterminados de Ubuntu 20.04


      Introducción

      MongoDB es una base de datos de documentos gratuita y de código abierto utilizada comúnmente en las aplicaciones web modernas.

      En este tutorial, instalará MongoDB, administrará su servicio y, de forma opcional, habilitará el acceso remoto.

      Nota: Al momento de la publicación de este artículo, este tutorial instala la versión 3.6 de MongoDB, que es la versión disponible en los repositorios predeterminados de Ubuntu. Sin embargo, generalmente recomendamos instalar la versión más reciente de MongoDB, es decir, la versión 4.4 al momento de la publicación de este artículo. Si desea instalar la versión más reciente de MongoDB, le recomendamos que siga esta guía sobre Cómo instalar MongoDB en Ubuntu 20.04.

      Requisitos previos

      Para seguir este tutorial, necesitará lo siguiente:

      Paso 1: Instalar MongoDB

      En los repositorios oficiales de paquetes de Ubuntu se incluye MongoDB, lo que significa que podemos instalar los paquetes necesarios utilizando apt. Como se mencionó en la introducción, la versión disponible en los repositorios predeterminados no es la más reciente. Para instalar la versión más reciente de Mongo, siga este tutorial.

      Primero, actualice la lista de paquetes para tener la versión más reciente de listados de repositorios:

      A continuación, instale el propio paquete de MongoDB:

      Este comando le solicitará confirmar que quiere instalar el paquete mongodb y sus dependencias. Para hacerlo, presione Y y, luego, ENTER.

      Este comando instala varios paquetes que contienen una versión estable de MongoDB, junto con herramientas de administración útiles para el servidor de MongoDB. El servidor de la base de datos se inicia de forma automática tras la instalación.

      A continuación, comprobaremos que el servidor esté activo y funcione de forma correcta.

      Paso 2: Comprobar el servicio y la base de datos

      El proceso de instalación inició MongoDB de forma automática, pero verificaremos que el servicio se inicie y que la base de datos funcione.

      Primero, compruebe el estado del servicio:

      • sudo systemctl status mongodb

      Verá este resultado:

      Output

      ● mongodb.service - An object/document-oriented database Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-10-08 14:23:22 UTC; 49s ago Docs: man:mongod(1) Main PID: 2790 (mongod) Tasks: 23 (limit: 2344) Memory: 42.2M CGroup: /system.slice/mongodb.service └─2790 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

      Según este resultado, el servidor MongoDB está funcionando.

      Podemos verificar esto en profundidad estableciendo conexión con el servidor de la base de datos y ejecutando el siguiente comando de diagnóstico. Con esto se mostrarán la versión actual de la base de datos, la dirección y el puerto del servidor, y el resultado del comando status:

      • mongo --eval 'db.runCommand({ connectionStatus: 1 })'

      Output

      MongoDB shell version v3.6.8 connecting to: mongodb://127.0.0.1:27017 Implicit session: session { "id" : UUID("e3c1f2a1-a426-4366-b5f8-c8b8e7813135") } MongoDB server version: 3.6.8 { "authInfo" : { "authenticatedUsers" : [ ], "authenticatedUserRoles" : [ ] }, "ok" : 1 }

      Un valor de 1 para el campo ok en la respuesta indica que el servidor funciona correctamente.

      A continuación, veremos la forma de administrar la instancia del servidor.

      Paso 3: Gestionar el servicio de MongoDB

      El proceso de instalación descrito en el Paso 1 configura MongoDB como servicio de systemd, lo que significa que puede administrarlo utilizando comandos systemctl estándares, junto con todos los demás servicios de sistema en Ubuntu.

      Para verificar el estado del servicio, escriba lo siguiente:

      • sudo systemctl status mongodb

      Puede detener el servidor en cualquier momento escribiendo lo siguiente:

      • sudo systemctl stop mongodb

      Para iniciar el servidor cuando esté detenido, escriba lo siguiente:

      • sudo systemctl start mongodb

      También puede reiniciar el servidor con el siguiente comando:

      • sudo systemctl restart mongodb

      Por defecto, MongoDB se configura para iniciarse de forma automática con el servidor. Si desea desactivar el inicio automático, escriba lo siguiente:

      • sudo systemctl disable mongodb

      Puede volver a habilitar el inicio automático en cualquier momento con el siguiente comando:

      • sudo systemctl enable mongodb

      A continuación, ajustaremos la configuración del firewall para nuestra instalación MongoDB.

      Paso 4: Ajustar el firewall (opcional)

      Suponiendo que siguió las instrucciones del tutorial de configuración inicial para servidores para habilitar el firewall en su servidor, no será posible acceder al servidor de MongoDB desde Internet.

      Si tiene intención de usar el servidor de MongoDB solo a nivel local con aplicaciones que se ejecuten en el mismo servidor, este es el ajuste recomendado y seguro. Sin embargo, si desea poder conectarse con su servidor MongoDB desde Internet, deberá permitir las conexiones entrantes añadiendo una regla UFW.

      Para permitir el acceso a MongoDB en su puerto predeterminado 27017 desde cualquier parte, podría ejecutar sudo ufw allow 27017. Sin embargo, permitir el acceso a Internet al servidor de MongoDB en una instalación predeterminada proporciona acceso ilimitado al servidor de la base de datos y a sus datos.

      En la mayoría de los casos, solo se debe acceder a MongoDB desde determinadas ubicaciones de confianza, como otro servidor que aloje una aplicación. Para permitir solo el acceso al puerto predeterminado de MongoDB mediante otro servidor de confianza, puede especificar la dirección IP del servidor remoto en el comando ufw. De esta manera, solo se permitirá que esa máquina se conecte de forma explícita:

      • sudo ufw allow from trusted_server_ip/32 to any port 27017

      Puede verificar el cambio en los ajustes del firewall con ufw:

      Debería ver la habilitación del tráfico hacia el puerto 27017 en el resultado. Tenga en cuenta que si decidió permitir que solo una dirección IP determinada se conecte con el servidor de MongoDB, en el resultado de este comando se enumerará la dirección IP de la ubicación autorizada en lugar de Anywhere.

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 27017 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 27017 (v6) ALLOW Anywhere (v6)

      Puede encontrar ajustes de firewall más avanzados para restringir el acceso a servicios en Aspectos básicos de UFW: Reglas y comandos comunes de firewall.

      Aunque el puerto esté abierto, MongoDB seguirá escuchando solo en la dirección local 127.0.0.1. Para permitir conexiones remotas, agregue la dirección IP pública de su servidor al archivo mongodb.conf.

      Abra el archivo de configuración de MongoDB en su editor de texto preferido: Este comando de ejemplo utiliza nano:

      • sudo nano /etc/mongodb.conf

      Agregue la dirección IP de su servidor de MongoDB al valor bindIP: Asegúrese de colocar una coma entre la dirección IP existente y la que agregó.

      /etc/mongodb.conf

      ...
      logappend=true
      
      bind_ip = 127.0.0.1,your_server_ip
      #port = 27017
      
      ...
      

      Guarde el archivo y salga del editor. Si utilizó nano para editar el archivo, hágalo pulsando CTRL + X, Y y, luego, ENTER.

      Luego, reinicie el servicio de MongoDB:

      • sudo systemctl restart mongodb

      MongoDB ahora recibirá conexiones remotas, pero cualquiera podrá acceder a él. Siga el tutorial Cómo instalar y proteger MongoDB en Ubuntu 20.04 para agregar un usuario administrativo y ampliar el bloqueo.

      Conclusión

      Puede encontrar tutoriales más detallados sobre cómo configurar y utilizar MongoDB en estos artículos de la comunidad de DigitalOcean. La documentación oficial de MongoDB también es un gran recurso en el que se abordan las posibilidades que ofrece MongoDB.



      Source link

      Información sobre los parámetros predeterminados en JavaScript


      El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      En ECMAScript 2015, se introdujeron parámetros de función predeterminados en el lenguaje JavaScript. Permiten a los desarrolladores inicializar una función con valores predeterminados si no se proporcionan argumentos para invocarla. El hecho de inicializar parámetros de función de esta manera hace que sus funciones sean más fáciles de leer y menos propensas a errores, y proporciona su comportamiento predeterminado. Lo ayudará a evitar los errores que se originan al pasar argumentos undefined y de desestructurar objetos que no existen.

      A lo largo de este artículo, revisará la diferencia entre parámetros y argumentos, aprenderá a usar parámetros predeterminados en funciones, conocerá maneras alternativas de admitir parámetros predeterminados y aprenderá los tipos de valores y expresiones que pueden usarse como parámetros predeterminados. También, verá ejemplos que demuestran cómo funcionan los parámetros predeterminados en JavaScript.

      Argumentos y parámetros

      Antes de explicar los parámetros de función predeterminados, es importante comprender los valores que pueden adoptar estos parámetros por defecto. Por eso, primero revisaremos la diferencia entre los argumentos y los parámetros de una función. Si desea obtener más información sobre esta distinción, lea el artículo anterior de nuestra serie de JavaScript Cómo definir funciones en JavaScript.

      En el siguiente bloque de código, creará una función que devuelve el cubo de un número dado que se define como x:

      // Define a function to cube a number
      function cube(x) {
        return x * x * x
      }
      

      La variable x de este ejemplo es un parámetro, una variable con nombre que se pasa a una función. Los parámetros siempre deben encontrarse en una variable y nunca deben tener un valor directo.

      Observé el siguiente bloque de código, que invoca la función cube que acaba de crear:

      // Invoke cube function
      cube(10)
      

      Esto generará el siguiente resultado:

      Output

      1000

      En este caso, 10 es un argumento, es decir, un valor que se pasa a una función cuando se la invoca. El valor también se suele encontrar dentro de una variable, como se puede observar en el siguiente ejemplo:

      // Assign a number to a variable
      const number = 10
      
      // Invoke cube function
      cube(number)
      

      El resultado es el mismo:

      Output

      1000

      Si una función que espera un argumento no lo recibe, usará implícitamente el valor undefined:

      // Invoke the cube function without passing an argument
      cube()
      

      El resultado es el siguiente:

      Output

      NaN

      En este caso, cube() intenta calcular el valor de undefined * undefined * undefined, lo que da como resultado NaN o “not a number”. Para obtener más información al respecto, consulte la sección de números en Información sobre los tipos de datos en JavaScript.

      A veces, este comportamiento automático de las funciones puede ser problemático. En algunos casos, puede ser conveniente que el parámetro tenga un valor, incluso si no se pasó ningún argumento a la función. Esos son los casos en los que la función parámetros predeterminados resulta útil, un tema que se tratará en la siguiente sección.

      Sintaxis de los parámetros predeterminados

      Con la incorporación de parámetros predeterminados de ES2015, ahora, puede asignar un valor predeterminado a cualquier parámetro, que la función usará en vez de undefined cuando se la invoque sin argumento. En esta sección, primero, se indicará el procedimiento manual y, luego, se brindará orientación para definir los parámetros predeterminados.

      Sin parámetros predeterminados, debería buscar específicamente los valores undefined para establecer valores predeterminados, tal como se indica en este ejemplo:

      // Check for undefined manually
      function cube(x) {
        if (typeof x === 'undefined') {
          x = 5
        }
      
        return x * x * x
      }
      
      cube()
      

      Aquí, se usa una instrucción condicional para corroborar si el valor se proporcionó automáticamente como undefined y, luego, se establece el valor de x en 5. Se obtendrá el siguiente resultado:

      Output

      125

      Por el contrario, si se usan parámetros predeterminados, se logra el mismo objetivo con mucho menos código. Puede establecer un valor predeterminado para el parámetro en cube al asignarle el operador de asignación de equivalencia (=), resaltado en el siguiente ejemplo:

      // Define a cube function with a default value
      function cube(x = 5) {
        return x * x * x
      }
      

      Ahora, cuando la función cube se invoque sin argumento, asignará 5 a x y mostará el cálculo en vez de NaN:

      // Invoke cube function without an argument
      cube()
      

      Output

      125

      Seguirá funcionando según lo previsto cuando se pase un argumento e ignorará el valor predeterminado:

      // Invoke cube function with an argument
      cube(2)
      

      Output

      8

      Sin embargo, una salvedad a tener en cuenta es que el valor del parámetro predeterminado también anulará el valor undefined explícito que se pase como argumento a una función, como se demuestra a continuación:

      // Invoke cube function with undefined
      cube(undefined)
      

      Se obtendrá un cálculo con x igual a 5:

      Output

      125

      En este caso, se calcularon los valores de los parámetros predeterminados y el valor undefined explícito no los anuló.

      Ahora que tiene una idea de la sintaxis básica de los parámetros predeterminados, en la sección siguiente, se indicará cómo funcionan con distintos tipos de datos.

      Tipos de datos de los parámetros predeterminados

      Se puede usar cualquier valor primitivo u objeto como valor de un parámetro predeterminado. En esta sección, verá que esta flexibilidad aumenta las formas en que se pueden utilizar los parámetros predeterminados.

      Primero, establezca los parámetros usando un número, una cadena, un booleano, un objeto, una matriz y un valor nulo como predeterminado. En este ejemplo, se usa la sintaxis arrow function:

      // Create functions with a default value for each data type
      const defaultNumber = (number = 42) => console.log(number)
      const defaultString = (string = 'Shark') => console.log(string)
      const defaultBoolean = (boolean = true) => console.log(boolean)
      const defaultObject = (object = { id: 7 }) => console.log(object)
      const defaultArray = (array = [1, 2, 3]) => console.log(array)
      const defaultNull = (nullValue = null) => console.log(nullValue)
      

      Al invocar estas funciones sin parámetros, todas usarán los valores predeterminados:

      // Invoke each function
      defaultNumber()
      defaultString()
      defaultBoolean()
      defaultObject()
      defaultArray()
      defaultNull()
      

      Output

      42 "Shark" true {id: 7} (3) [1, 2, 3] null

      Tenga en cuenta que los objetos que se creen con un parámetro predeterminado se crearán cada vez que se invoque la función. Un uso común de los parámetros predeterminados es aprovechar este comportamiento para obtener valores de los objetos. Si intenta acceder a un valor o desestructurarlo desde un objeto que no existe, obtendrá un error. Sin embargo, si el parámetro predeterminado es un objeto vacío, simplemente, se darán valores undefined en vez de devolver un error:

      // Define a settings function with a default object
      function settings(options = {}) {
        const { theme, debug } = options
      
        // Do something with settings
      }
      

      Esto evitará el error que genera la desestructuración de objetos que no existen.

      Ahora que aprendió cómo funcionan los parámetros predeterminados con distintos tipos de datos, en la siguiente sección, se explicará el funcionamiento conjunto de varios parámetros predeterminados.

      Uso de varios parámetros predeterminados

      Puede usar tantos parámetros predeterminados como desee en una función. En esta sección, aprenderá a hacerlo y a usarlos para manipular el DOM con un ejemplo práctico.

      Primero, declare una función sum() con varios parámetros predeterminados:

      // Define a function to add two values
      function sum(a = 1, b = 2) {
        return a + b
      }
      
      sum()
      

      Esto dará como resultado el siguiente cálculo predeterminado:

      Output

      3

      Además, el valor que se use en un parámetro se puede utilizar en cualquier parámetro predeterminado subsiguiente, de izquierda a derecha. Por ejemplo, la función createUser crea un objeto de usuario userObj como tercer parámetro y lo único que hace la función en sí misma es mostrar userObj con los primeros dos parámetros:

      // Define a function to create a user object using parameters
      function createUser(name, rank, userObj = { name, rank }) {
        return userObj
      }
      
      // Create user
      const user = createUser('Jean-Luc Picard', 'Captain')
      

      Si invoca la función user aquí, obtendrá el siguiente resultado:

      Output

      {name: "Jean-Luc Picard", rank: "Captain"}

      Se recomienda dejar todos los parámetros predeterminados al final de la lista de parámetros para poder omitir valores opcionales con facilidad. Si, primero, usa un parámetro predeterminado, deberá pasar explícitamente undefined para usar el valor por defecto.

      El ejemplo a continuación muestra el parámetro predeterminado al comienzo de la lista:

      // Define a function with a default parameter at the start of the list
      function defaultFirst(a = 1, b) {
        return a + b
      }
      

      Al invocar esta función, debería invocar defaultFirst() con dos argumentos:

      defaultFirst(undefined, 2)
      

      El resultado sería el siguiente:

      Output

      3

      En este ejemplo se muestra el parámetro predeterminado al final de la lista:

      // Define a function with a default parameter at the end of the list
      function defaultLast(a, b = 1) {
        return a + b
      }
      
      defaultLast(2)
      

      El resultado sería el mismo:

      Output

      3

      Las dos funciones tienen el mismo resultado, pero la que tiene el valor predeterminado al final de la lista permite invocar la función de forma mucho más ordenada.

      En este ejemplo práctico, la función creará un elemento DOM y agregará una etiqueta de texto y clases, si existen.

      // Define function to create an element
      function createNewElement(tag, text, classNames = []) {
        const el = document.createElement(tag)
        el.textContent = text
      
        classNames.forEach(className => {
          el.classList.add(className)
        })
      
        return el
      }
      

      Puede invocar la función con algunas clases en una matriz:

      const greeting = createNewElement('p', 'Hello!', ['greeting', 'active'])
      

      Al invocar greeting, se obtendrá el siguiente valor:

      Output

      <p class="greeting active">Hello!</p>

      Sin embargo, si no incluye la matriz classNames en la llamada de función, de todos modos, funcionará.

      const greeting2 = createNewElement('p', 'Hello!')
      

      Ahora, greeting2 tiene el siguiente valor:

      Output

      <p>Hello!</p>

      En este ejemplo, forEach() se puede usar en una matriz vacía sin ningún problema. Si la matriz vacía no se hubiera establecido en el parámetro predeterminado, obtendría el siguiente error:

      Output

      VM2673:5 Uncaught TypeError: Cannot read property 'forEach' of undefined at createNewElement (<anonymous>:5:14) at <anonymous>:12:18

      Ahora que aprendió cómo pueden interactuar varios parámetros predeterminados, puede avanzar a la siguiente sección para ver cómo funcionan las llamadas de función como parámetros predeterminados.

      Llamadas de función como parámetros predeterminados

      Además de los tipos primitivos y los objetos, el resultado de una llamada de función se puede usar como parámetro predeterminado.

      En el siguiente bloque de código, creará una función que mostrará un número al azar y, luego, usará el resultado como valor del parámetro predeterminado en una función cube:

      // Define a function to return a random number from 1 to 10
      function getRandomNumber() {
        return Math.floor(Math.random() * 10)
      }
      
      // Use the random number function as a default parameter for the cube function
      function cube(x = getRandomNumber()) {
        return x * x * x
      }
      

      Al invocar la función cube sin un parámetro, es posible que se obtengan resultados diferentes cada vez que se invoque.

      // Invoke cube function twice for two potentially different results
      cube()
      cube()
      

      El resultado de estas llamadas de función variará:

      Output

      512 64

      Incluso puede usar métodos incorporados, como los que del objeto Math, y utilizar el valor devuelto en una llamada de función como parámetro en otra función.

      En el siguiente ejemplo, se asigna un número al azar a x, que se usa como parámetro en la función cube que creó. Luego, el parámetro y calculará la raíz cúbica del número y corroborará si x e y son equivalentes:

      // Assign a random number to x
      // Assign the cube root of the result of the cube function and x to y
      function doesXEqualY(x = getRandomNumber(), y = Math.cbrt(cube(x))) {
        return x === y
      }
      
      doesXEqualY()
      

      Esto dará el siguiente resultado:

      Output

      true

      Como se puede observar en el siguiente ejemplo, un parámetro predeterminado puede ser, incluso, una definición de función, que define un parámetro como función inner y devuelve la llamada de función de parameter:

      // Define a function with a default parameter that is an anonymous function
      function outer(
        parameter = function inner() {
          return 100
        }
      ) {
        return parameter()
      }
      
      // Invoke outer function
      outer()
      

      Output

      100

      La función inner se creará de cero cada vez que se invoque la función outer.

      Conclusión

      En este artículo, conoció los parámetros de función predeterminados y aprendió a usarlos. Ahora, puede usar parámetros predeterminados como ayuda para mantener sus funciones ordenadas y fáciles de leer. También sabe asignar matrices y objetos vacíos a parámetros de antemano para reducir la complejidad y la cantidad de líneas de código en tareas como la recuperación de valores de un objeto o la repetición de una matriz.

      Si desea obtener más información sobre JavaScript, consulte la página de inicio de nuestra serie Cómo producir código en JavaScript o busque nuestra serie Cómo producir código en Node.js para hallar artículos sobre el desarrollo de backend.



      Source link