Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

363
Views
La función de devolución de llamada de exportación del módulo devuelve indefinido

Hola: soy nuevo en nodejs y mocha. Intento usar module.exports para devolver un valor de una función de devolución de llamada. Sin embargo, está regresando undefined . Sin embargo, para casos simples funciona. Por favor ayuda.

Resultado

 Module Export Example √ Test Case 1: Module Hello Node World!!! (*** this works - its a direct return ***) √ Test Case 2: Module undefined (*** this fails - its from a callback fn ***)

google.js

 var requirejs = require('requirejs'); requirejs.config({ baseUrl: '.', paths: { }, nodeRequire: require }); describe('Module Export Example', function(){ var mod; before(function(done){ requirejs(['./googleModule'], function(_mod) { mod = _mod; done(); }); }); it('Test Case 1: Module', function(done){ console.log(mod.get(done)); }); it('Test Case 2: Module', function(done){ console.log(mod.google(done)); }); });

googleModule.js

 var request = require('request'); module.exports = { get: function(done){ var a = "Hello Node World!!!"; return(done(), a); }, google: function(done){ var a = doCallback(function(){ var b = "PRINT DATA: " + data.statusCode + ' ' + data.headers['content-type']; return(done(), b); }); return(done(), a); } } function doCallback(callback, done){ var options = {url: 'http://www.google.com', headers: {'Content-Type': 'text/html'}, encoding: null}; request.get(options, function(err, res, body){ var a = callback(res, done); return (callback(), a); //??????? }); }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Debido a que dice que es nuevo en nodejs y mocha, asumo que no quería hacer nada elegante y simplificó su código.

Resultado

 Module Export Example Hello Node World!!! ✓ Test Case 1: Module test PRINT DATA: 200 text/html; charset=ISO-8859-1 ✓ Test Case 2: Module (194ms)

prueba/prueba.js

 let mod = require('../googleModule'); describe('Module Export Example', function(){ it('Test Case 1: Module', function(){ console.log(mod.get()); // this is synchronous, no done needed }); it('Test Case 2: Module', function(done){ mod.google(function(res) { console.log(res); done(); // this is asynchronous, so we need to tell mocha when we are done }); console.log('test'); }); });

googleModule.js

 let request = require('request'); module.exports = { get: function() { let a = "Hello Node World!!!"; return a; }, google: function(callback) { let options = {url: 'http://www.google.com', headers: {'Content-Type': 'text/html'}, encoding: null}; request.get(options, function(err, res, body) { var b = "PRINT DATA: " + res.statusCode + ' ' + res.headers['content-type']; callback(b); }); } }

Cambié 2 cosas importantes para que funcione.

  1. Eliminé require.js. No necesita usar eso en node.js porque ya se incluye un cargador de módulos.

  2. En javascript hay funciones síncronas y asíncronas. Las funciones sincrónicas son funciones regulares que conoce de otros lenguajes de programación como PHP o Java. Sin embargo, javascript también tiene funciones asíncronas. La diferencia es que el código dentro de una función asíncrona se ejecutará más tarde y no puede esperar que devuelva el valor inmediatamente. Como ejemplo, mire el resultado de su prueba y compárelo con su código. Como puede ver, console.log('test'); se imprime ANTES de console.log(res) , aunque está debajo del otro. Para manejar esto, javascript hace uso de devoluciones de llamada (o Promesas). Una devolución de llamada es como una forma de decirle al programa dónde debe continuar una vez que finaliza la función asíncrona. En su caso, la solicitud HTTP es asíncrona, por lo que debe indicarle a su código que "espere" a que finalice y luego lo imprima. El done se usa para decirle a mocha cuando la prueba ha terminado.

Probablemente sea mejor si lee algunos artículos sobre cómo funcionan las funciones asíncronas.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!