4

这是我的基本 node.js 应用程序,只有两个文件:

应用程序.js

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');
var app = express();

module.exports = { 
  test: "test"
};


// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
    // defining  middlewares

app.get('/', routes.index);




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

和我的 index.js:

var server = require('../app');
exports.index = function(req, res){
    console.log(server);
    res.send('Hello world');
};

我的问题是当我转到 时http:\\localhost:3000,我在控制台中看到{}而不是{test: "test"},它看起来 module.eports无法正常工作。为什么 ?

4

2 回答 2

5

index.js从内部要求app.js,然后app.js从内部要求index.js,对我来说就像代码味道。此外,如果您使用var app = module.exports = express()Express,则可以将您的应用程序视为中间件(例如,您可以拥有第二个应用程序而requires不是第一个应用程序,并将一些请求传递给它。

当我需要访问app另一个所需文件时,我执行以下操作:

// ./routes/index.js
module.exports = function(app){
  var routes = {};
  routes.index = function(req, res){
    console.log(app.myConfig);
    res.send('Hello world');
  };
  return routes;
};

// ./app.js
var app = module.exports = express();
app.myConfig = {foo:'bar'};
var routes = require('./routes/index.js')(app);
于 2013-06-25T19:42:49.507 回答
0

您不需要在 index.js 中包含 app

indes.js 应该只是

exports.index = function(req, res){
    console.log(server);
    res.send('Hello world');
};

我假设 index.js 像这样在路由文件夹中

app.js
routes
  index.js
于 2013-06-25T19:40:31.773 回答