【问题标题】:Exporting and module exporting in node.jsnode.js 中的导出和模块导出
【发布时间】:2016-10-05 18:23:06
【问题描述】:

我在主根目录上有一个文件

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 和 export 感到困惑,我的 module.exports 已经传递给另一个文件,我想添加另一个变量,即 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')();

在控制器/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

【问题讨论】:

    标签: javascript node.js promise q


    【解决方案1】:

    exports 只是module.exports's 的小帮手。您的模块最终将module.exports 返回给调用者not exports。所有导出都是收集属性并将它们附加到module.exports 如果module.exports 上还没有任何东西。如果 module.exports 已经附加了一些东西,那么 export 上的所有内容都会被忽略。

    您可以将两者都作为对象传递

     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 
    

    【讨论】:

    • 我已经做到了,但是我怎样才能访问 var router = require('../test_file.js').router;不工作
    • 实际上我在路由器中没有任何代码要检查,所以我只是在为 io 做日志记录,我编辑了我的代码,看看有什么问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多