我正在开发一个基本的Node应用程序,我有app.js,这需要我的大多数依赖项,然后我有另一个模块,只需要http
和url
。
然而,在这个其他模块中,我需要将我的快速应用程序传递给它,因为我不必再在子模块中设置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:应用程序未定义错误。
答案 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);