使用module.exports在nodejs模块之间共享对象

时间:2016-04-16 06:59:58

标签: node.js express module socket.io

这是我如何构建我的代码

主要.js

var express = require('express');
var http = require('http');
var  app = express();
var  io = require('socket.io')(http.createServer(app));

http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

module.exports.io = io; // because I wont to access this object from Home.js module

Index.js

var express = require('express')
, router = express.Router();
router.use('/home', require('./home'))
module.exports = router

Home.js

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

io = require('../main').io;
router.get('/', function(req, res,next) {
res.send("response from home controller"+ io );
})

现在问题就在这里 当我尝试访问时     http://localhost:3000/home ,我得到以下回复 "来自家庭控制器的响应未定义" (对象io未定义)

伙计们,你能突出我错误的地方

2 个答案:

答案 0 :(得分:1)

问题是您尚未在Home.js中定义变量

在Home.js中将此import boto3 s3_client = boto3.Session().client('s3') response = s3_client.get_object(Bucket='hotsapi', Key='18e8b4df-6dad-e1f5-bfc7-48899e6e6a16.StormReplay', RequestPayer='requester') response_content = response['Body'].read() with open('./B01.StormReplay', 'wb') as file: file.write(response_content) 更改为io = require('../main').io;

答案 1 :(得分:0)

以下对我有用:

Home.js

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

var io = require('../main');
router.get('/', function(req, res, next) {
  res.send("response from home controller "+ io );
});

我一直在拼命寻找一种更合适的解决方案,以使io在不同的文件中可用,但是直到现在,我才找到我在这里提到的那个。