小编jwe*_*ner的帖子

侦听大多数端口时出现Node.js EACCES错误

我正在测试一个应用程序(希望在heroku上运行,但在本地也有问题).运行http.Server.listen()时它会给我一个EACCES错误 - 但它只发生在某些端口上.

所以,我在本地运行:

joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)
Run Code Online (Sandbox Code Playgroud)

我没有在端口900上运行任何东西(或者我试过的其他20个端口),所以这应该有效.奇怪的是它确实可以在某些端口上运行.例如,端口3000完美运行.

什么会导致这个?

更新1:

我发现在我的本地计算机上,EACCES错误即将发生,因为我必须以root身份运行节点才能绑定到那些特定端口.我不知道为什么会这样,但使用sudo修复它.但是,这并没有解释我如何在Heroku上修复它.没有办法在Heroku上以root身份运行,那么我怎样才能在端口80上侦听?

http permission-denied node.js

231
推荐指数
10
解决办法
25万
查看次数

在它变得粗鲁之前有多少记忆?

我目前正在开发一个网络应用程序,并且受到了几个不同的应用程序(主要是Cloud9IDE)的启发,他们在javascript对象中占据了大部分界面.这使得将来添加功能非常容易,并且还允许将来使用可扩展性选项.

问题是,在内存中存储数据(通过javascript)在什么时候变得粗鲁.我正在建立一个社交网络(想像Twitter),基本上我会为每个"推文"存储一个对象,以及一些更广泛的对象用于界面项目.

浏览器是否强制要求我使用多少内存?如果我过去,我的网站会崩溃吗?或者整个浏览器会崩溃吗?它会减慢用户的速度吗?如果是这样,是否有一般规则可以打扰普通用户多少内存?

javascript memory performance

33
推荐指数
1
解决办法
8517
查看次数

Node.JS Webserver中的安全性

所以,我正在学习Node.JS的方法,到目前为止,我很喜欢它.我已经有几个项目在工作,我认为我可以使用nodejs.

不过,我担心安全问题.如果我使用Node.JS的http模块编写自定义Web服务器,我是否可能极易受到攻击?Apache/IIS已经有多年(以及数年和数年)的专业团队在他们的网络服务器中建立安全性,而且人们仍然在寻找漏洞.我的自制网络服务器是否可能更容易受到攻击?

我可以集中精力为我的网络服务器构建一个良好的安全层?有没有关于这个主题的好文章?

javascript security webserver http node.js

32
推荐指数
3
解决办法
8440
查看次数

获取MySQL中的更新值而不是受影响的行

我一直试图找到这个问题的答案,但在我的研究中没有找到任何明确的"是"或"否".

我正在运行这样一个简单的MySQL查询:

 UPDATE item SET `score`=`score`+1 WHERE `id`=1
Run Code Online (Sandbox Code Playgroud)

有没有办法让该查询返回更新的值,而不是受影响的行数?作为参考,我在PHP中这样做,所以实际代码如下:

 $sql = "UPDATE item SET `score`=`score`+1 WHERE `id`=1";
 $new_value = mysql_query($sql); 
 //Unfortunately this does not return the new value
Run Code Online (Sandbox Code Playgroud)

我知道我可以做第二个查询而只是选择值,但我试图尽可能减少查询.有办法吗?

php mysql

24
推荐指数
2
解决办法
2万
查看次数

将子域发送到node.js

我的工作在运行apache的ubuntu服务器(10.10)上运行几个不同的内部Web应用程序.我目前正在开发另一个Web应用程序,我正在认真考虑在定制的node.js Web服务器上进行开发.我想要这样做的理由是:

  1. 速度/可扩展性
  2. 安全性 - 页面将通过交换机...案例提供,而不是仅仅为(潜在的恶意)用户提供他们要求的服务.
  3. 易于设置 - 我的意图是这是一个开源项目,node.js更容易设置用户,而不是处理apache/IIS /等.

我的问题是,在我有apache监听端口80的服务器上,如何将某个子域传递给node.js. 我已经看过几篇关于使用apache虚拟主机传递它的文章,但这似乎打败了使用node.js的目的.如果我必须通过apache,那么我避免apache/IIS的所有三个原因都已自我解决.

我知道我可以使用不同的端口(:8080?),但从最终用户的角度来看,放入自定义端口非常困惑.还有其他想法吗?

谢谢

apache virtualhost node.js

18
推荐指数
3
解决办法
9935
查看次数

使用资源分支进行HTTP上载

我正在为一些客户构建基于PHP的上传服务.我正在使用SWFUpload,以便我可以在上传时查看文件的进度.我已经完成了它,但是在我们向公众发布它之前,我遇到了最后一个问题.

我们的许多(几乎所有)客户都是基于Mac的,并且正在上传包含InDesign文件,字体,Illustrator文件等的文件集.大多数时候图像文件都可以,但偶尔(并且始终使用Type 1字体)该文件将被损坏,因为它正在丢失资源分叉.

我理解为什么会这样(从多叉系统转移到单叉系统),但我找不到任何优雅的解决方案.在我的研究中,到目前为止我找到的最佳答案是"让用户压缩它".我知道这很有效,但我们客户认为,要求他们压缩他们要发送的每一组文件是不合理的.

有没有更好的解决方案来保持这些资源叉活着?当然,我更喜欢直接javascript/php的解决方案,但是会选择基于flash或(最不优选)基于java的东西.

我对新解决方案的唯一要求是:

  • 查看上传进度
  • 用户无需手动压缩文件

这是关于我的系统的一些信息

  • Ubuntu 10.10服务器运行标准LAMP安装
  • PHP5
  • SWFUpload(wtv是最新版本)

php ftp upload fork

12
推荐指数
1
解决办法
394
查看次数

Node.js HTTPS 400错误 - 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'

我正在编写一个Node.js应用程序,它必须从我们的一个内部API请求一些数据.棘手的部分是我请求数据的服务器有一些限制:

  • 请求必须在HTTPS协议(不是HTTP)上进行
  • 必须使用LAN IP地址进行请求,因为域名在内部不起作用
  • 该请求必须看起来是从外部域名请求,因为这是为虚拟主机设置的.

为了做到这一点,我运行了一些看起来像这样的代码:

var headers = {
    Host: externalHostname,
    Hostname: externalHostname,
};

var options = {
    host: InternalIP,
    path: path,
    method: 'GET',
    headers: headers
};

var req = https.request(options, function(res) {
    res.setEncoding('utf8');

    var data = "";

    res.on('data', function(chunk) {
        data += chunk;
    });

    res.on('end', function() {
        //Do something with that data
    });

    res.on('error', function(err) {
            console.log("Error during HTTP request");
            console.log(err);
    });
});

req.end();
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到一个400(你的浏览器发送了一个请求,这个服务器无法理解)错误作为响应.我已经检查过主机名,IP地址和路径名都是正确的(我可以在我的浏览器中测试它们,并且一切都很好).

我做了我的响应变量(res)的输出,并且我收到的authorizationError值为UNABLE_TO_VERIFY_LEAF_SIGNATURE.我不确定那是什么,或者这是我的问题,但它是我能找到的唯一有用的信息.

在这里输出了我的响应变量的完整输出.

关于可能导致这种情况的任何想法?

更新:我想通了!我试图通过传递?PHPSESSID=asdad GET变量来验证服务器,但是他们已经禁用了.我能够通过设置PHPSESSID …

ssl https node.js

9
推荐指数
2
解决办法
1万
查看次数

对于循环或循环 - 效率

这可能是一个愚蠢的问题,但是while循环的效率如何与for循环的效率相比较?我一直被教导如果你可以使用for循环,那么我应该.但实际上是什么区别:

$i = 0;
while($i < 100) {
     echo $i;
     $i++;
} 
Run Code Online (Sandbox Code Playgroud)

相比于:

for($i = 0; $i < 100; $i++) {
    echo $i;
}
Run Code Online (Sandbox Code Playgroud)

我知道在这些具体的例子中差异就像.000000001%,但是当我们谈论大型复杂循环时,有什么区别?

performance loops

8
推荐指数
2
解决办法
1万
查看次数

AJAX调用的自定义PHP错误

我正在构建一个Web应用程序,我想知道如何处理我的AJAX调用错误.例如,如果用户输入某种无效的数据(错误的电子邮件地址,用户已存在),我希望能够从PHP中抛出错误.

我在这里看到http://php4every1.com/tutorials/jquery-ajax-tutorial/您可以使用JSON对象并处理来自JQuery的Success函数的错误报告,但这似乎不是正确的方法做到这一点.对我来说,当出现错误时应该使用jQuery的错误函数.我想我是那种东西的坚持者.

这就是我现在正在做的事情.

//In my PHP file called from JQuery
function error($msg) {
    header("HTTP/1.0 555 ".$msg);
    die();
}
//Then that error is handled accordingly from JQuery
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个555的错误代码 - 它没有被定义为任何东西 - 并且在我自己的自定义错误消息上添加了.这是正确的方法吗?我应该只使用JSON吗?必须有一种标准的方式来发送这样的错误信息,对吗?

如果您需要查看更多我的代码以获得更好的想法,整个项目都在github上:https://github.com/josephwegner/fileDrop.有问题的文件是config/phpFuncts.php.

php ajax jquery

6
推荐指数
1
解决办法
4157
查看次数

向回调函数添加其他参数

我正在Node.js中构建一个系统,它应该找到文件夹数组中的所有文件,对它们进行统计,然后使用该信息做一些额外的工作.

我正在使用fs.readdir()从每个文件夹同步获取所有文件.我的代码看起来像这样:

for(i=0,max=paths.length; i<max; i++) {
    var path = paths.pop();
    console.log("READING PATH: " + path);
    fs.readdir(path, function(err, files) { handleDir(err, files, path); });
}
Run Code Online (Sandbox Code Playgroud)

问题是,根据readdir()执行的速度,handleDir()获取错误的路径.发生这种情况是因为在回调运行时,下一个循环已经开始 - 意味着路径变量已经改变.

所以,我需要做的是以某种方式将路径变量锁定到它的特定回调函数.我想不出有什么好办法 - 任何人都有一些想法?

javascript callback synchronous node.js

5
推荐指数
2
解决办法
4653
查看次数