2012-09-05 16 views
7

Tengo este código nodeJS.Nodo JS - Llamar a un método desde otro método en el mismo archivo

module.exports = { 

    foo: function(req, res){ 
    ... 
    this.bar(); // failing 
    bar(); // failing 
    ... 
    }, 

    bar: function(){ 
    ... 
    ... 
    } 
} 

tengo que llamar al método bar() desde el interior del método foo(). Intenté this.bar() así como bar(), pero ambos fallaron diciendo TypeError: Object #<Object> has no method 'bar()'.

¿Cómo puedo llamar a un método desde el otro?

+0

'module.exports.foo.call (this);'? – ChaosPandion

+0

@Danil foo es un controlador de solicitud que se llama desde el enrutador. – Veera

+0

Algo definitivamente está cambiando el contexto 'this', pero la pregunta es ¿quién? – ChaosPandion

Respuesta

4

hacerlo de esta manera: se necesita

module.exports = { 

    foo: function(req, res){ 

    bar(); 

    }, 
    bar: bar 
} 

function bar() { 
    ... 
} 

No se cierre.

+0

tan global 'bar()' then? –

+0

No. Solo dentro de este módulo. – timidboy

+0

Así es como funciona Node.js. – timidboy

1

Creo que lo que puedes hacer es bind contexto antes de pasar la devolución de llamada.

something.registerCallback(module.exports.foo.bind(module.exports)); 
1

Prueba esto:

module.exports = (function() { 
    function realBar() { 
     console.log('works'); 
    } 
    return { 

     foo: function(){ 
      realBar(); 
     }, 

     bar: realBar 
    }; 
}()); 
0

¿Está previsto que la barra sea interna (privada) para foo?

module.exports = { 
    foo: function(req, res){ 
     ... 
     function bar() { 
      ... 
      ... 
     } 
     bar();  
     ... 
    } 
} 
0

Pruebe el siguiente código. Se puede hacer referencia cada función desde cualquier lugar (necesita importar el archivo .js)

function foo(req,res){ 
    console.log("you are now in foo"); 
    bar(); 
} 
exports.foo = foo; 

function bar(){ 
    console.log("you are now in bar"); 
} 
exports.bar = bar; 
0

La respuesta aceptada es incorrecto, es necesario llamar al método de barras desde el ámbito actual utilizando la palabra "this":

module.exports = { 
     foo: function(req, res){ 

     this.bar(); 

     }, 
     bar: function() { console.log('bar'); } 
    } 
Cuestiones relacionadas