Importar funcion con parámetro en nodejs

publicado por: Anonymous

En el archivo principal app.js estoy importando el archivo fabrica así:

var ror2 = require(‘./node_modules/node-svm/sample/fabrica’);

y lo uso así:

app.post('/servidor', function(req,res){

console.log(req.body.fact);//muestra bien el arreglo 
ror2.fabricar(req.body.fact);//envio el array 

});

Ese archivo tiene mi función que pasa de array a Map

    var fabricar=function(obj){
// const obj = [{id: 'a', time: 1}, {id: 'a', time: 2}, {id: 'b', time: 1}];
console.log(obj);// muestra el array que mando
const objMapped = obj.reduce((acc, item) => {
  let { id, time } = item;
  acc[id] = acc[id] || [];
  acc[id].push(time);
  return acc;
}, []);

console.log(objMapped);
}

exports.fabricar=fabricar;

Quiero importar la función fabricar

solución

module.exports es uno de los pseudo-global built-in identifiers o identificadores seudo-globales incorporados de node.js que te permite definir y exportar cualquier trozo de código que quieras reutilizar en tu aplicación. Para hacer uso de un módulo se usa require, el cual básicamente se encarga de leer el código que hayas definido en tu módulo, ejecutarlo y retornar la propiedad exports del objeto module.

Bien, teniendo en cuenta esto, ya podemos entender por qué tu código no funciona:

Si declaras el siguiente módulo llamado myModule.js:

module.exports.logSomething = function(arg) {
  console.log(arg);
}

y lo intentas llamar desde main.js de la siguiente manera:

const logSomething = require('./myModule.js');
logSomething('hello');

Saltará un error debido a que logSomething en realidad no es una función, sino un objeto.

Por lo tanto tienes tres opciones:

Primero, asignar la función directamente a module.exports:

// myModule.js:
module.exports = function(arg) {
  console.log(arg);
}

// main.js:
const logSomething = require('./myModule.js');
logSomething('hello');

Segundo, asignar la función como una propiedad de exports y al momento de importar en otro archivo solamente importar dicha función:

// myModule.js:
module.exports.logSomething = function(arg) {
  console.log(arg);
}

// main.js:
const logSomething = require('./myModule.js').logSomething;
logSomething('hello');

Tercero, importar el módulo completo y llamar la función que se necesite:

// myModule.js:
module.exports = {
  logSomething: function(arg) {
    console.log(arg);
  },

  doSomethingElse: function(nonsense) {
    console.log(nonsense);
  }
}

// main.js:
const myModule = require('./myModule.js');
myModule.logSomething('hello');
myModule.doSomethingElse('something else');

Y listo. Programar es maravilloso.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *