我有一个简单的socket.io服务器使用socket.io-redis,一个socket.io-emitter,我运行redis(这对我来说是全新的,我在Windows上,我下载了redis并打开了redis-server .exe和redis-cli.exe).通过带有命令的redis CLI,monitor我看到服务器已连接,并且事件从发射器到达redis,但从test-server.js不记录任何内容.我还需要做什么?socket.io服务器是否需要订阅redis?
Redis输出 "publish" "socket.io#/#" "\x93\xa7emitter\x83\xa4type\x02\xa4data\x92\xa4test\xa9some data\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x80"
测试server.js
var server = require('http').Server();
var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));
io.on('connection', function(socket){
console.log('client connected'); // Works
socket.emit('connect','test'); // Works
});
io.on('test', function(socket){
console.log('test came in'); // Works
});
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
测试emit.js
var io = require('socket.io-emitter')({
host:'localhost',
port:'6379'
});
setInterval(function(){
io.emit('test', 'some data');
console.log('emitted');
}, 5000);
Run Code Online (Sandbox Code Playgroud) 简而言之:我想将.bind的结果绑定为它自己的调用中的争论
var bound = foo.bind(this,bound);
Run Code Online (Sandbox Code Playgroud)
因为我不确定如何解决我的问题.
问题:
我有一个项目依赖于其他项目的数组.删除其中一个项后,我想删除依赖项,并删除依赖项上的所有侦听器.
我正在努力删除其他依赖项的事件处理程序.我正在尝试使用bind,但由于处理函数是删除侦听器的函数,我发现我必须将bind()调用的结果作为参数绑定在它自己的调用中.这样做不起作用.
下面的绑定调用将"处理程序"的未绑定版本绑定为参数,因此removeEventListener不起作用,因为它是函数的不同副本.
问题是:我可以使用bind来做这个和/或我怎么能解决这个问题?
我使用eventemitter3,但它应该是任何事件库相同.
setHandlers(dependentItem,dependencies)
{
var handler = this.onDependencyRemoved;
handler = handler.bind(this,dependentItem,dependencies,handler);//bind itself as third argument
dependencies.forEach(dependency => {
dependency.addEventListener("removed",handler);
});
}
onDependencyRemoved(dependentItem,dependencies,handler)
{
dependentItem.remove();
dependencies.forEach(dependency => {
dependency.removeEventListener("removed",handler);
});
}
Run Code Online (Sandbox Code Playgroud)
编辑:
完成在nodejs中运行的工作示例:
const EventEmitter = require('events');
//const EventEmitter = require('eventemitter3');
class MyEmitter extends EventEmitter {
remove() {
console.log("I'm being removed, this should happen only once");
}
}
var dependent = new MyEmitter(); …Run Code Online (Sandbox Code Playgroud) 我正在将一个相当大的打字稿项目从内部模块移动到外部模块.我这样做是因为我想创建一个核心捆绑包,如果需要,可以加载其他捆绑包.我要记住的第二个要求是,我希望能够在nodeJS服务器上运行捆绑包(如果需要,可以进行一些修改).
我首先尝试使用AMD和require.js来构建核心包,但我遇到了循环依赖的问题.在阅读了这与require.js相同之后,commonJS更经常被建议用于大型项目我尝试过.但现在,它的建立与browserify我在一起的确切同样的问题,在相同的位置上来,当我运行编译包.
我有类似10个基类的东西,它们相互依赖并形成多个循环依赖.我没有看到任何方法来删除所有这些.
一个简化的设置来解释为什么我认为我不能删除循环依赖项:
Triples are made of 3 Resources (subject,predicate,object)
Resource has TripleCollections to keep track of which triples its used in
Resource has multiple functions which rely on properties of Triple
Triple has some functions which handle TripleCollections
TripleCollection has multiple functions which uses functions of Triple
TripleCollection.getSubjects() returns a ResourceCollection
ResourceCollection.getTriples() returns a TripleCollection
Resource keeps track of the objects of its triples in ResourceCollections
ResourceCollection uses multiple functions of Resource
Run Code Online (Sandbox Code Playgroud)
我已经在SO上阅读了多个相关问题(这个问题最有帮助),而且从我可以收集到的内容中我只有几个选项:
1)将所有具有循环依赖关系的基类放在1个文件中. …
好的,所以为node.js编写的模块可以与browserify一起组合成bundle.
但是,万一我只有一堆由browserify而不是源创建的包,是否仍然可以在浏览器之外的node.js环境中"要求"或以其他方式使用这些包及其内容?(授予代码不做任何浏览器特定的事情)
简而言之:有没有办法知道是否需要typescript参数和/或有默认值?
更长的版本:说我有以下文件:
//Foo.ts
class Bar {
foo(required:string,defaultValue:number=0,optional?:boolean) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道每个参数:
我已成功使用方法装饰用的打字稿反射API来获取参数类型,我用这个方法来获得他们的名字,但到目前为止,我还没有找到一个办法知道,如果一个变量需要和/或有一个默认值.
我知道typescript编译器本身可以在typescript中使用.所以我想知道是否有办法使用编译器的解析树来查看是否需要参数和/或是否有默认值?
那会怎么样?
我正在使用webpack加载器将typescript ts-loader源文件编译成javascript包.现在我想保存个别编译的javascript文件,以及捆绑!我很喜欢编写一个非常简单的webpack插件,但我不确定如何实现它.那就是:我不知道webpack触发哪些事件来监听以及在哪里找到相关数据.有帮助吗?
以下内容是否exclude: '/node_modules/'仅排除同一目录中的node_modules文件夹,还是会排除嵌套的node_module文件夹?如果不是:我如何调整它以排除所有node_module文件夹?
module: {
loaders: [
{ test: /\.ts$/, loader: 'ts-loader',exclude: '/node_modules/' }
]
},
Run Code Online (Sandbox Code Playgroud)
Filestructure:
/general
/node_modules
/mod1
/src
/node_modules
/mod2
/src
/node_modules
Run Code Online (Sandbox Code Playgroud) 我正在使用vanilla JavaScript发送带有JSON数据的AJAX发布请求:
xhr.open(method, url,true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));
Run Code Online (Sandbox Code Playgroud)
标题看起来不错,但在PHP中$_POST是空的.关于这一点有几个相关的问题,就像这个,但他们都建议使用:
json_decode(file_get_contents("php://input"))
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用jQuery.post我的变量$_POST,那么它必须是可能的.我的问题是怎么样?我可能做错了什么?或者我可以改变什么?
所以我刚刚更新到 webpack 2 并进行了我的第一个工作设置,其中 webpack 通过查看 System.import 调用自动创建块。好甜!
但是,我使用 ajax 调用加载初始块,以便在加载时显示进度
所以我的问题是,我可以以某种方式覆盖或更改 System.import 的功能,以便它使用我可以侦听事件的 ajax 请求,而不是用<script>标签加载块吗?
模块A的package.json将模块B列为依赖项
"dependencies": {
"@mynamespace/module-b": "^0.0.1",
Run Code Online (Sandbox Code Playgroud)
模块B是本地模块,已成功从模块A与链接npm link。编译/运行一切顺利。
但是,当我尝试在模块A中安装任何新模块npm install something或只是运行时,npm install或者npm uninstall something总是从npm收到错误消息,即找不到本地模块(npm链接)。
C:\web\module-b>npm install
npm ERR! code E404
npm ERR! 404 Not Found: @mynamespace/module-b@^0.0.1
Run Code Online (Sandbox Code Playgroud)
我按照这里的建议检查了两个模块中的main属性package.json。有几个类似的问题,但似乎没有一个完全是这个问题或给出了可行的解决方案。
现在,我手动从package.json中删除所有提及的链接模块,然后运行npm命令,然后将它们添加回package.json中。
我正在使用npm 6.1.0
编辑:嗯,这可能很关键吗?@ mynamespace / module-b在NPM注册表中尚不存在,仅在本地
如果B扩展了A,A是否可以定义创建新B的方法?
class SetA {
constructor(public items:any[]) {
}
createNew(items){
return new *typeof this*(items); //<-- insert actually working magic here
}
clone(){
return this.createNew(this.items);
}
}
class SetB extends SetA { }
var x = new SetB([1,2,3]);
x.clone(); //<-- returns a new SetB
Run Code Online (Sandbox Code Playgroud) javascript ×4
typescript ×4
node.js ×3
webpack ×3
ajax ×2
browserify ×2
commonjs ×1
filepath ×1
function ×1
inheritance ×1
jquery ×1
node-modules ×1
npm ×1
npm-link ×1
php ×1
post ×1
progress-bar ×1
redis ×1
reflection ×1
socket.io ×1
types ×1
webpack-2 ×1