2

我正在构建一个小型 node.js/express 项目,并在 configure.js 中有一个函数,可以在我的 express 应用程序中设置配置选项。例如:

服务器.js

var express = require('express');
var server = ('./configure');

var app = express();
server.configure(app);

配置.js

exports.configure = function(app) {
  app.set('title', 'Server');
};

这不起作用,但我希望它解释了我正在尝试做的事情。我想对 server.js 中的应用程序实例进行更改。我该怎么做呢?

编辑:

好的,我想如果我理解为什么这不起作用,我可以让这一切正常工作。是否与回调的时间有关?第二个 console.log() 没有被调用。

配置.js

var fs = require('fs');

var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');


function configure(app) {

  var config = module.exports = {};

    fs.readFile('config.txt', function (err, data) {
      if (err) throw err;

      config.title = decoder.write(data)
      console.log(config.title)

    });

    if(config.title) console.log(config.title);
    //app.set('title', config.title)
}

module.exports = function (app) {
  configure(app);
};

服务器.js

var express = require('express');
var cfg = require('./configure');
var fs = require('fs');

var app = express()

cfg(app)

(config.txt 是 echo 'server' > config.txt)

4

2 回答 2

1

你所拥有的应该真正起作用。

至于您关于使用多个功能的问题,您可以分别导出和调用每个功能。当时间很重要时(例如,如果需要执行未在 中指定的其他设置步骤configure.js),这可能很有用:

// configure.js

exports.configure = function (app) {
  // ...
};

exports.attachMiddlware = function (app) {
  // ...
};
// server.js

var express = require('express');
var server = require('./configure');

var app = express();
server.configure(app);
server.attachMiddlware(app);

您还可以将单个条目定义function导出的对象,该对象调用configure.js. 这可以server.js通过将维护隔离在以下范围内来保持清洁configure.js

function configure(app) {
  // ...
}

function attachMiddleware(app) {
  // ...
}

module.exports = function (app) {
  configure(app);
  attachMiddleware(app)
};
var express = require('express');
var configure = require('./configure');

var app = express();
configure(app);
于 2012-10-30T19:37:37.287 回答
0

我会避免这种情况,只做一个 json 对象:

应用程序.js

var cfg = require('./config');
app.set('title', cfg.title);

配置.js

var config = module.exports = {};
config.title = 'Server';
于 2012-10-30T20:34:12.513 回答