使用来自路径文件的快速和访问模块组织节点应用

时间:2014-04-01 03:41:26

标签: javascript node.js express

所以我使用npm express生成了一个基本应用程序。我得到了以下app.js文件,现在我正在尝试添加更多模块,但我似乎无法在路径文件中访问它们。例如,我添加了模块请求,当我尝试从index.js发出请求时,我得到了错误500 ReferenceError: request is not defined我该如何创建它以便我能够访问从其他路由添加的新模块?< / p>

app.js

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var request = require('request');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

/routes/index.js

exports.index = function(req, res){
  request(options, function (error, response, body) {
        //console.log(body);
        if (!error && response.statusCode === 200) {
            res.send('worked');
        }
    });
};

2 个答案:

答案 0 :(得分:0)

使用将对象传递到路线。我就是这样做的。

<强>路由/ index.js

var module = null;
exports.setModule = function(mod){
  module = mod;
}
exports.index = function(req, res){
  //You can now use your module here
  res.render('index', { title: 'Express' });
};

<强> app.js (发送fs模块)

var fs = require('fs');
var routes = require('./routes');
routes.setModule(fs)

虽然为什么不简单地要求每个文件上需要的模块?如果模块是单件,我不会发现任何问题。

答案 1 :(得分:0)

您需要在模块内部要求使用它:

var request = require('request');

exports.index = function(req, res){
  request(options, function (error, response, body) {
        //console.log(body);
        if (!error && response.statusCode === 200) {
            res.send('worked');
        }
    });
};

或者,您可以使模块导出一个返回路由对象的函数(显式传递请求):

module.exports = function(request) {

  return {
    index: function(req, res){
      request(options, function (error, response, body) {
          //console.log(body);
          if (!error && response.statusCode === 200) {
            res.send('worked');
          }
      });
     }
   };
};

var routes = require('./routes')(request);中的app.js。这可以让你集中依赖声明,但是在一个地方声明一个依赖只能在另一个地方使用它时会感到有点混乱。