Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express-如何在路由文件中使用io.socket.emit?_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript Express-如何在路由文件中使用io.socket.emit?

Javascript Express-如何在路由文件中使用io.socket.emit?,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我有一个带有express(nodeJS)的应用程序 在DB上写入一些数据时要发出io.socket,所以需要在路由文件(ex./routes/save.js)中发出 这是我的app.js var express = require('express'); var save = require('./routes/save'); var http = require('http'); var app = express(); var server = require('http').Server

我有一个带有express(nodeJS)的应用程序

在DB上写入一些数据时要发出io.socket,所以需要在路由文件(ex./routes/save.js)中发出

这是我的app.js

var express = require('express');
var save = require('./routes/save');
var http = require('http');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
......
io.on('connection', function(socket){
    socket.on('newTweet', function(msg){
        io.emit('newTweet', msg);
    });
});

app.use('/save', save);
.....
module.exports = app;
server.listen(3000, function () {
    var host = server.address().address
    var port = server.address().port
})
你能帮我在
/routes/save.js
中编写
io.socket.emit('event')

我找到了一种方法

在应用程序之前使用('/save',save)需要在
app.js中编写以下代码

app.use(function(req, res, next) {
    req.io = io;
    next();
});
然后从save.js中的
req
参数获取
io
比如说

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

router.post('/', function(req, res, next) {
    .....
    var io = req.io;
    io.emit('newTweet', 'test');
    .....
});

module.exports = router;
如果你知道比这条更好的路,请告诉我。

我找到了一条路

在应用程序之前使用('/save',save)
需要在
app.js中编写以下代码

app.use(function(req, res, next) {
    req.io = io;
    next();
});
然后从save.js中的
req
参数获取
io
比如说

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

router.post('/', function(req, res, next) {
    .....
    var io = req.io;
    io.emit('newTweet', 'test');
    .....
});

module.exports = router;

如果您知道比这个更好的方法,请告诉我。

您可以像这样将io对象传递给您的路由:

var app = express();
var io           = socket_io();
app.io           = io;

require('./routes/index')(app,io);

您可以像这样将io对象传递到路由:

var app = express();
var io           = socket_io();
app.io           = io;

require('./routes/index')(app,io);

我刚刚将io对象传递给routes你可以在下面查看我的答案我刚刚将io对象传递给routes你可以在下面查看我的答案