如何将app = express()传递到另一个模块?

时间:2014-11-04 17:01:35

标签: javascript node.js express

我正在开发一个基本的Node应用程序,我有app.js,这需要我的大多数依赖项,然后我有另一个模块,只需要httpurl

然而,在这个其他模块中,我需要将我的快速应用程序传递给它,因为我不必再在子模块中设置var app = express()。

你如何将应用程序传递给我的get_twitter.js?

主app.js

var express     = require('express');
var app         = express();
var hello       = require('./custom_hello');
var gettwitter  = require('./get_twitter');

hello();

app.get('/', function(request, response) {
    response.sendFile(__dirname + "/index.html");
});

app.gettwitter();

app.listen(9000);
console.log('listening on 9000...');

get_twitter模块:

/* =========================================
GET TWITTER Node module
========================================= */

var http = require('http');
var url  = require('url');

app.get('/tweets/:username', function(req, response) {

    var username = req.params.username;

    options = {
        protocol: "http:",
        host: "api.twitter.com",
        pathname: "/1/statuses/user_timeline.json",
        query: { screen_name: username, count: 10 }
    }

    var twitterUrl = url.format(options);
    request(twitterUrl).pipe(response);

});

目前,如果按原样运行,app当然会抛出 ReferenceError:应用程序未定义错误

1 个答案:

答案 0 :(得分:4)

您需要将模块包装在一个函数中并将其导出。然后,您可以将您的应用程序传递给要在模块中使用的函数。

//get_twitter.js

function Get_Twitter(app){

    var http = require('http');
    var url  = require('url');

    app.get('/tweets/:username', function(req, response) {

        var username = req.params.username;

        options = {
            protocol: "http:",
            host: "api.twitter.com",
            pathname: "/1/statuses/user_timeline.json",
            query: { screen_name: username, count: 10 }
        }

        var twitterUrl = url.format(options);
        request(twitterUrl).pipe(response);

    });

}

exports = Get_Twitter;

然后在您的主应用程序中,调用它

var Get_Twitter = require("get_twitter")(app);