注意:对于有此问题的任何人,我尝试了所有建议和所有研究.最后我格式化硬盘并重新安装了Windows.尽管从一开始就是一个全新的安装,一些Windows安装似乎根本不适用于节点.据我所知,这是唯一的解决方案.
首先,我已经发现了类似的问题: 基本的Node.js示例不能在Windows 7上运行,这似乎是同样的问题,但没有解决方案.我也在网上找到了没有解决方案的论坛帖子,但很多人发布了同样的问题.
Node.exe并且npm两者似乎都没有网络访问权限.npm install发送获取请求,永远不会得到响应.访问mongodb的节点脚本从不发送连接请求.我将这个代码从我的旧机器复制到我的新机器上.这是我放在新机器上的第一件事.旧机器运行Windows 7 64家庭高级和新的Windows 7 64终极.我已经尝试了所有兼容模式,以管理员身份运行,禁用Windows防火墙,还没有防病毒软件,我已经卸载/重新安装,并且我尝试更改版本,即使从旧计算机到新计算机的版本是相同的.我搜索了stackoverflow和互联网,并找到了其他问题,但没有解决方案.我有一个虚拟的盒子ubuntu vm可以成功运行节点但是我希望能够在没有vm的情况下运行它,如果可能的话我似乎无法找到问题的原因.甚至两台计算机之间的OEM软件几乎完全相同,因为旧版本是外星人m15x而新版本是m14x.任何帮助表示赞赏.
编辑:
我目前正在使用最新版本(0.6.10).在运行npm install并使其挂起后,我使用netstat并在node.exe下得到以下结果:
[node.exe]
TCP 10.20.21.225:49690 ec2-107-20-159-167.compute-1.amazonaws.com:https ESTABLISHED
[node.exe]
TCP 10.20.21.225:49691 nuq04s08-in-f31.1e100.net:https TIME_WAIT
TCP 10.20.21.225:49692 fa-in-f94.1e100.net:https TIME_WAIT
TCP 10.20.21.225:49693 nuq04s08-in-f19.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49696 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49702 nuq04s08-in-f6.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49703 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49704 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49706 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49707 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49708 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49709 nuq04s08-in-f26.1e100.net:http TIME_WAIT
Run Code Online (Sandbox Code Playgroud)
现在,当我在node.js主页上运行示例服务器时,我无法在浏览器中获取hello世界,但是连接在netstat中:
[node.exe]
TCP 127.0.0.1:1337 Robbie-PC:49805 ESTABLISHED
[node.exe]
TCP …Run Code Online (Sandbox Code Playgroud) 所以我想在node.js程序的末尾运行一个shell命令,并在退出之前等待输出/打印它.我尝试process.on('exit',function(){})并在那里运行子exec命令,但程序在回调之前退出.所以我在process.exit上使用了一个闭包,但是我得到了一些奇怪的结果.代码的基础是:
process.exit = (function(old_exit){
return function(code){
var exec = require('child_process').exec;
var child;
child = exec("my shell command", function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
console.log(stdout);
//I first had this as the concluding line:
old_exit.apply(process,arguments);
//and I also tried
old_exit.apply(process,[]);
//and even (which I know is not in the right scope)
old_exit(code);
//and also
process.exit = old_exit;
process.exit(code);
});
}
}(process.exit));
Run Code Online (Sandbox Code Playgroud)
上面的每一个结果都执行了我的shell命令两次,然后退出.我也尝试不在最后调用任何东西,虽然这使得我的命令只执行了一次,但是进程挂起而不是在最后退出.除非有一些东西,我只是缺少了,我觉得我的第一次尝试old_exit.apply(process,arguments);是正确的方式,不应该再次调用我自己的代码,它确实如此.我也尝试了使用的promises,它不起作用(它甚至没有因为多次解析而抛出错误)而且我尝试使用布尔值,如果它已经设置但是也没有用.我终于甚至尝试在回调完成后抛出一个错误,但这会强制在错误之后再次调用process.exit.有任何想法吗?
我正在尝试编写一个通用的 scala 实用程序函数来处理 Apache Thrift 生成的 Java 类。所有 Thrift 生成的 Java 类都TBase使用以下签名扩展接口:
public interface TBase<T extends TBase<?,?>, F extends TFieldIdEnum>
Run Code Online (Sandbox Code Playgroud)
这在创建通用节俭实用程序函数时总是被证明是有问题的,在 Java 世界中,我通常通过@SuppressWarnings("rawtypes")知道我正在正确处理它并有效地忽略编译器告诉我它无法验证匹配类型来解决这个问题.
在 scala 世界中,我似乎没有奢侈或忽略这些类型,并且遇到了我似乎无法弄清楚如何满足泛型类型要求的情况。
所以我创建了自己的函数,它将给定的非节俭对象转换为所请求的节俭类的实例,其签名类似于:
def myFunc[T <: TBase[T, E], E<: TFieldIdEnum](obj: Any, clazz: Class[T]): T = {
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,要调用此函数,我必须执行以下操作:
myFunc[MyThriftClass,MyThriftClass._Fields]( obj, classOf[MyThriftClass] )
Run Code Online (Sandbox Code Playgroud)
如果没有明确指定第二个类型参数,编译将失败:
error: inferred type arguments [MyThriftClass,Nothing] do not conform to method myFunc's type parameter bounds [T <: org.apache.thrift.TBase[T,E],E <: org.apache.thrift.TFieldIdEnum]
myFunc( null, classOf[MyThriftClass])
^
error: type mismatch;
found : Class[MyThriftClass](classOf[MyThriftClass])
required: …Run Code Online (Sandbox Code Playgroud) 这可能看起来像一个愚蠢的问题,但我没有在我的mapreduce代码中看到我的类型中的问题为hadoop
正如问题中所述,问题是它期望IntWritable,但我在reducer的collector.collect中传递了一个Text对象.
我的作业配置有以下映射器输出类:
conf.setMapOutputKeyClass(IntWritable.class);
conf.setMapOutputValueClass(IntWritable.class);
Run Code Online (Sandbox Code Playgroud)
以下减速机输出类:
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
Run Code Online (Sandbox Code Playgroud)
我的映射类具有以下定义:
public static class Reduce extends MapReduceBase implements Reducer<IntWritable, IntWritable, Text, IntWritable>
Run Code Online (Sandbox Code Playgroud)
具有所需功能:
public void reduce(IntWritable key, Iterator<IntWritable> values, OutputCollector<Text,IntWritable> output, Reporter reporter)
Run Code Online (Sandbox Code Playgroud)
然后当我打电话时失败:
output.collect(new Text(),new IntWritable());
Run Code Online (Sandbox Code Playgroud)
我是相当新的map reduce,但所有类型似乎都匹配,它编译但是然后在该行上失败,说它期望IntWritable作为reduce类的键.如果重要的话我使用的是0.21版本的Hadoop
这是我的地图类:
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, IntWritable, IntWritable> {
private IntWritable node = new IntWritable();
private IntWritable edge = new IntWritable();
public void map(LongWritable key, Text value, OutputCollector<IntWritable, IntWritable> output, Reporter reporter) throws IOException {
String line = value.toString(); …Run Code Online (Sandbox Code Playgroud) 所以在node.js中我有一个使用aes128的加密方案而没有通过IV.以下是一个例子
var cipher = require('crypto').createCipher('aes128','password');
cipher.update('test','utf8','base64')+cipher.final('base64');
Run Code Online (Sandbox Code Playgroud)
哪个输出CjZ3R/tW8jiyLvg+/TE6bA==.问题是我无法在PHP中重现这一点,即使我已经尝试了一堆实现和变体.
当我尝试通过openssl运行时,我运行以下命令:
echo "test" | openssl enc -e -aes128 -a -k password
Run Code Online (Sandbox Code Playgroud)
输出U2FsdGVkX19Ccfv3SWvuzuZWeov9GDuwx1RMK2HWa/s =也是不匹配的.我也试过使用-md所有可能的选项,但也不匹配(它们甚至不是相同的块大小).在PHP中运行时,我尝试使用填充来散列键/非散列,使用输入上的计算填充,其中填充字符是所需填充字符的数量(在网上看到这是nodejs使用的内容).我已经尝试将IV设置为密码并且也设置为空字节但仍然无法获得匹配.
这里有什么建议/想法吗?
编辑:
所以我刚刚在php中发现了函数openssl_encrypt并尝试了相同的测试,并再次得到了一个完全不同的输出(这个现在与node.js完全相同的args,并且据说它们都使用openssl):
openssl_encrypt ( "test" , 'aes128' , "password")
Run Code Online (Sandbox Code Playgroud)
哪个输出(已经在base64中)JleA91MvYHdEdnj3KYHmog==至少现在在块计数中匹配但仍然不是相同的密文.
我还要提一下,是的,将一个IV传递给nodejs是一个选项,可能会解决这个差异,但是php中的这个方案将替换已经存在的nodejs中的旧方案,因此它必须能够解密已经创建的密文