如何将变量从路由传递到server.js

时间:2017-04-27 08:32:36

标签: javascript node.js sockets express import

我遇到将当前数据发送到新套接字连接的问题。我有一个带有当前代码的server.js文件:

server.js:

// Importing and initializing npm/node plugins
var app = require('express')();
var server = require('http').createServer(app);

// Import config settings
var config = require('./config.js');

// Create socket server and allow connections from certain ip
var io = require('socket.io')(server);
io.set('origins', 'http://' + config.url + ':' + config.client_http_port);


app.use(require('./routes/index.js'));


// Create mongoDB connection
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://' + config.url + '/' + config.database_name);

// Inform new socket connections
io.on('connection', function (socket) {
    console.log('Client connected!');
    setTimeout(function () {
      // socket.emit('variable comes here');   <------------
    }, 3000);
});

// Open server in port
server.listen(config.server_port, function () {
    console.log('Server listening on port: ' + config.server_port);
});

module.exports = app;

在我的index.js路由中,我有一个变量,我想传递给server.js并从那里传递到新的套接字连接。如何将路径index.js中的变量导入服务器文件server.js?

index.js:

// Importing and initializing npm/node plugins
var express = require('express');
var router = express.Router();

var data = {test:'data123'}; // <--------- this one

module.exports = router;

2 个答案:

答案 0 :(得分:1)

如果您的数据对象是静态的,那么您可以将其导出到index.js并将其导入server.js

如果生成或获取数据对象(异步),则必须创建从server.js调用并返回data值的getter函数。但请注意,数据可能是undefined,因此在获取对象后请检查。

动态数据的另一个解决方案是创建获取数据异步的函数,然后调用server.js中提供的回调,

答案 1 :(得分:0)

您可以在index.js中导出routerdata变量:

module.exports.router = router;
module.exports.data = data;

然后在server.js中导入datarouter,如下所示:

var router = require('./routes/index.js').router;
var data = require('./routes/index.js').data;

app.use(router); //instead of app.use(require('./routes/index.js'));