我正在使用 Express.js 构建一个小型 Node 应用程序,并且为了使我的server.js
文件尽可能干净,我想在外部文件中构建我的配置。这是服务器的外观:
// server.js
var express = require( 'express' );
var app = express();
app.enable( 'trust proxy' );
// Set application config params
require( './config.js' )( app, express );
// Load routes and start listening...
require( './routes' )( app );
app.listen( app.get( 'port' ) );
我的config.js
文件设置了一些默认值,然后更新或覆盖NODE_ENV
特定配置函数中的配置。除了那个讨厌的时机,一切都会好起来的。
我的路线需要访问一些配置值。有没有办法确保我的路由已加载并且我的服务器仅在配置完全加载后才开始侦听?有没有更好的办法?
我得到了事件循环,但我是 node/express 的新手,所以我对几乎任何事情都持开放态度。在我进行的过程中,我根据我在各种文章或文档资源中所读到的内容,将我知道我想做的事情拼凑在一起,从而弥补了这一点。我认为我在这里并不过分,但也许这过于乐观了。
更新
我的config.js
.
module.exports = function( app, express ) {
var config = this;
app.configure( function() {
app.set( 'port', 3000 );
app.set( 'datasources', {
'api' : {...},
'mysql' : {...}
});
app.use( express.logger() );
app.use( express.bodyParser() );
app.use( express.cookieParser() );
app.use( express.methodOverride() );
app.use( app.router );
});
// dev-specific config
app.configure( 'development', function() {
console.log( 'Loading development configuration' );
app.use( express.errorHandler({ dumpExceptions: true, showStack: true }) );
// update the mysql config with a connection object
var datasources = app.get( 'datasources' );
var mysqlConnection = require( 'mysql' ).createConnection({...});
datasources.mysql.connection = mysqlConnection;
app.set( 'datasources', datasources );
});
// stg-specific config
app.configure( 'staging', function() {
console.log( 'Loading staging configuration' );
app.use( express.errorHandler() );
// update the mysql config with a connection object
var datasources = app.get( 'datasources' );
var mysqlConnection = require( 'mysql' ).createConnection({...});
datasources.mysql.connection = mysqlConnection;
app.set( 'datasources', datasources );
});
// prd-specific config
app.configure( 'production', function() {
console.log( 'Loading production configuration' );
app.use( express.errorHandler() );
});
console.log( app.get( 'datasources' ) );
console.log( 'Configuration loaded' );
return config;
};