Вызов функции app.js из модуля в node.js? - PullRequest
3 голосов
/ 27 января 2012

Допустим, у меня есть следующий app.js (очевидно, очень упрощенный):

var express = require('express'),
    app = express.createServer();

// include routes
require('./lib/routes')(app);

// some random function
var foo = function() {
    return 'bar';
};

// another random function
var foo2 = function() {
    return 'bar2';
};

И тогда у меня есть модуль маршрутов:

module.exports = function(app){
    app.get('/some/route', function(req, res){
        var fooBar = foo(),
            fooBar2 = foo2();

        res.end(fooBar + fooBar2);
    });
};

Это, очевидно, не работает, так как foo и foo2 не были определены в модуле. Есть ли способ заставить это работать, или, по крайней мере, другой шаблон, чтобы лучше выполнить то, что это?

1 Ответ

6 голосов
/ 27 января 2012

Ну, вы можете просто поместить эти две функции в объект и передать их при инициализации route.js.

var express = require('express'),
    app = express.createServer();

// some random function
var foo = function() {
    return 'bar';
};

// another random function
var foo2 = function() {
    return 'bar2';
};

var fns = {foo : foo, foo2: foo2}

// include routes
require('./lib/routes')(app, fns);

в маршрутах:

module.exports = function(app, fns){
    app.get('/some/route', function(req, res){
        var fooBar = fns.foo(),
            fooBar2 = fns.foo2();

        res.end(fooBar + fooBar2);
    });
};

Вот как бы я это сделал.Вы также можете включить их в объект приложения.Помимо передачи их в функции инициализации, вы также можете экспортировать эти две функции и требовать их в rout.js.

var express = require('express'),
    app = express.createServer();

// some random function
var foo = function() {
    return 'bar';
};

// another random function
var foo2 = function() {
    return 'bar2';
};

module.exports = {foo : foo, foo2: foo2}

// include routes
require('./lib/routes')(app, fns);

в маршрутах:

module.exports = function(app){
    var fns = require('../app.js');
    app.get('/some/route', function(req, res){
        var fooBar = fns.foo(),
            fooBar2 = fns.foo2();

        res.end(fooBar + fooBar2);
    });
};

Но мне не нравится идея этого, поскольку он создает циклические зависимости.Не испытывай к ним хороших чувств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...