如何与node + express共享对象

时间:2017-07-06 12:23:35

标签: node.js express module

我正在使用Node + express,我正试图弄清楚如何在主js文件中与我的模块共享对象实例。我在下面有这个代码。

var express = require('express');

//libs
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var conf      = require('config');
var logConf   = conf.get('log');
var winston = require('winston');


//modules
var index = require('./routes/index');
var users = require('./routes/users');
var camera = require('./routes/camera');
var face = require('./routes/face');
var secret = require('./routes/secret');
var attendance = require('./routes/attendance');
var azure = require('./routes/azure-test');

//configuring log
var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ filename: logConf.get('file') })
    ]
  });

require('events').EventEmitter.prototype._maxListeners = 200;

var app = express();

/*Handling CORS*/
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
  next();
});

/*trying to avoid undesirable response code. 
 *Ex: you send 200 and express send 304 ... annoying!
 */
app.disable('etag');

//setting image dir for static server
app.use("/tmp", express.static(__dirname + '/tmp'));
app.use("/public", express.static(__dirname + '/public'));
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
//app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

//putting modules in the game...
app.use('/', index);
app.use('/users', users);
app.use('/camera', camera);
app.use('/face', face);
app.use('/attendance', attendance);


// catch 404 and forward to error handler
app.use(function(req, res, next) {

  var err = new Error('Not Found');
  err.status = 404;
  next(err);

});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  console.error("LOCALS ERRORS: " + res.locals.error);
  console.error("LOCALS MESSAGES: " + err.message);
  JSON.stringify(res.locals.error || err.message)});

});

//Set port
app.set('port', process.env.PORT || 7000) ;

//setting public on static server
//app.use(express.static(path.join(__dirname, 'public')));

//setting server up
var server = app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + server.address().port);
});


logger.info('starting application');

module.exports = app;

目标不是在所有模块中配置和实例新的'winston'对象。我是Node和express的noobie,所以如果你有一些关于它的文档(我无法找到),请指向我!如果你想直接给我答案,那就更好了!

THX!

1 个答案:

答案 0 :(得分:2)

你可以制作'共享'模块并定义你需要分享的东西

例如

// shared.js
var winston = require('winston');
var conf      = require('config');
var logConf   = conf.get('log');

var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ filename: logConf.get('file') })
    ]
  });

module.exports = {
    logger: logger
    // other things 
}

在其他文件中只需要shared.js并使用

var shared = require('./shared');
var logger = shared.logger;
相关问题