在node.js中导出和模块导出

时间:2016-10-05 07:15:50

标签: javascript node.js promise q

我在主根上有一个文件

  

test_file.js

以下是其中的代码

var config = require('config');
var Ctrl = require('./Controllers');
var port = process.env.PORT || config.get("PORT") || 3000;
var cors = require('cors');
var express = require('express');  
var app = express();
var router = express.Router();

app.use(cors());

app.use(router);
var server = require('http').createServer(app); 

var io = require('socket.io')(server, {'pingInterval': 4000, 'pingTimeout': 6000});

io.on('connection', Ctrl.connection);

console.log("Opening at port " + port);
server.listen(port, function () {
});

module.exports = router;
require('./Routes')();

我在路径中有另一个文件

  

/Controllers/index.js

我想将io传递给index.js,这是它​​的代码

    var Promise = require('q').Promise;
    var config  = require('config');
    var mysql   = require('mysql');

/// I want to get var io = require('../test_file.js');

    /**Initialization socket connection */
    exports.connection = function (socket) {
        if (!(socket.handshake.query.accountType != null && socket.handshake.query.id != null && socket.handshake.query.accessKey != null
            && socket.handshake.query.id > 0)) {
            socket.disconnect();
            return;
        }

现在我对module.exports和exports感到困惑,我的module.exports已经传递给另一个文件,我想添加另一个变量i-e io并将其传递给控制器​​文件。我怎么能这样做

在回复查询时,

app.use(router);
var server = require('http').createServer(app); 

var io = require('socket.io')(server, {'pingInterval': 4000, 'pingTimeout': 6000});
module.exports = {
  router: router,
  io: io
};

io.on('connection', Ctrl.connection);

console.log("Opening at port " + port);
server.listen(port, function () {
});

require('./Routes')();

在Controllers / index.js

var Promise = require('q').Promise;
var config  = require('config');
var mysql   = require('mysql');

var Driver  = require('./driver');
var User    = require('./user');

var io = require('../test_file.js').io;
console.log("logging");
console.log(io);

结果为{} for io

1 个答案:

答案 0 :(得分:0)

  

exports只是module.exports's小帮手。您的模块最终将module.exports返回给调用方not exports。所有导出都是收集属性并将它们附加到module.exports如果module.exports已经没有内容。如果已经有一些附加到module.exports的内容,则会忽略导出中的所有内容。

你可以将两者作为对象传递

 module.exports = {
  router: router,
  io: io
};

Please refer this doc for more explanation

修改

通过module.exports访问对象

file.js

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = {router:router}; 

使用

访问它
var router=require('./file').router
   OR

var router=require('./file');

router.router