我已经socket.io
在工作,app.js
但是当我尝试从其他模块调用它时,io.connection
是否会不确定?
app.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var ditconsumer = require('./app/consumers/ditconsumer');
ditconsumer.start(io);
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
Consumer.js
module.exports = {
start: function (io) {
consumer.on('message', function (message) {
logger.log('info', message.value);
io.on('connection', function (socket) {
socket.on('message', function(message) {
socket.emit('ditConsumer',message.value);
console.log('from console',message.value);
});
});
});
}
}
由于app.js通常是应用程序中的主要初始化模块,因此通常会同时初始化Web服务器和socket.io并加载应用程序所需的其他内容。
因此,io
与其他模块共享的一种典型方法是将它们传递给该模块的构造函数中的其他模块。那会像这样工作:
var server = require('http').createServer(app);
var io = require('socket.io')(server);
// load consumer.js and pass it the socket.io object
require('./consumer.js)(io);
// other app.js code follows
然后,在consumer.js中:
// define constructor function that gets `io` send to it
module.exports = function(io) {
io.on('connection', function(socket) {
socket.on('message', function(message) {
logger.log('info',message.value);
socket.emit('ditConsumer',message.value);
console.log('from console',message.value);
});
});
};
或者,如果您想使用一种.start()
方法来初始化事物,则可以对此进行相同的操作(存在细微差别):
// app.js
var server = require('http').createServer(app);
var io = require('socket.io')(server);
// load consumer.js and pass it the socket.io html" target="_blank">object
var consumer = require('./consumer.js);
consumer.start(io);
// other app.js code follows
而Consumer.js中的start方法
// consumer.js
// define start method that gets `io` send to it
module.exports = {
start: function(io) {
io.on('connection', function(socket) {
socket.on('message', function(message) {
logger.log('info',message.value);
socket.emit('ditConsumer',message.value);
console.log('from console',message.value);
});
});
};
}
这就是所谓的资源共享“推送”模块。正在加载的模块通过在构造函数中传递一些共享信息给您。
还有“拉”模型,其中模块本身调用其他模块中的方法来检索共享信息(在这种情况下为io
对象)。
通常,可以使任何一个模型都可以工作,但是鉴于模块的加载方式以及谁拥有所需的信息以及您打算如何在其他情况下重用模块,通常一个或另一个模型会更自然。
问题内容: 在我的情况下,我需要转发到另一个端点的请求。在我的机器中,有两个服务器php和node.js服务器。Node.js就像一个“中间人”,PHP服务器必须以相同的方式工作。 Node.js服务器代码 当此服务器在端口3000中收到获取请求时,它将处理请求信息,并且必须将同一请求转发到另一个端点。 例如: 获取localhost:3000 / track?param1 = 1&param2
问题内容: 如何将C编译模块(例如python- Levenshtein)运送到Spark集群中的每个节点? 我知道我可以使用独立的Python脚本(以下示例代码)在Spark中运送Python文件: 但是在没有“ .py”的情况下,我该如何运送模块? 问题答案: 如果可以将模块打包到或文件中,则在构造SparkContext时应该可以将其列出(或者以后可以通过sc.addPyFile进行添加)。
问题内容: 我有一个ES6模块。将其作为参数执行即可: 是模块的输出。 与此相反,REPL中的以下输入等待进一步的输入: 我不明白为什么。 与以下相同: 尝试导致: 那么,如何在Node.js REPL中导入ES模块? 问题答案: 目前这是不可能的。ES模块应该从ES模块范围导入,而REPL不被认为是其中之一。随着时间的推移,这会有所改善,因为ES模块的支持是实验性的。在Node模块实现中和的使用
我正在尝试将钩子{count,setCount}=useState(0)导出到另一个函数,以便能够获取{count}值。我的应用程序是通过添加项目来制作一个简单的清单,然后当按下提交按钮时,获取该清单的渲染。 以下是我的库存对象列表: 最好的方法是将我的钩子移动到应用程序函数中,但是增加或减少{计数}会影响我的所有项目。 在运行函数displayOrder时,是否仍要为每个项呈现{count}?
该部分 API 将帮助您使用其他 mBuild 电子模块。 注意:你需要额外购买包含 mBuild 电子模块扩展包或套装来获得 mBuild 模块以使用这些功能。 省略代码中的halocode 注意:该部分 API 省略了“halocode.”,本篇提及的所有 API 均省略了“halocode.” ,如 led_driver.off( )实际为halocode.led_driver.off()。
我制作了我的python模块,它<code>A。py使用如下所示。在这种情况下,如何导入<code>B。py在?我想使用其他目录中的模块。但由于路径问题,我的代码无法工作。 A.py 碧桂园 main _ in _ mylib.py 主.py ModuleNotFoundError:没有名为“B”的模块 ModuleNotFoundError:没有名为“B”的模块