【问题标题】:How to pass app = express() into another module?如何将 app = express() 传递到另一个模块?
【发布时间】:2014-11-04 17:01:35
【问题描述】:

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

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

你会如何将 app 传递到我的 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: app is not defined 错误

【问题讨论】:

  • var gettwitter = require('./get_twitter')(app);?
  • 我也试过了,但在我的 get_twitter.js 中仍然得到ReferenceError: app is not defined

标签: javascript node.js express


【解决方案1】:

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

//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);

【讨论】:

  • 如果我使用var Get_Twitter = require("./get_twitter")(app); 我得到对象不是函数。我删除了 (app),然后我在 app.js 中的 Get_Twitter(app); 上得到了同样的错误
  • 从您的主应用中删除 app.gettwitter();
  • 我也有 get_twitter.js 在根目录中,而不是在 node_modules 文件夹中,所以不得不放回./
猜你喜欢
  • 2019-03-02
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2021-11-13
  • 2015-01-20
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多