zoukankan      html  css  js  c++  java
  • nodejs 80端口监听失败及NODE_PATH不起作用的问题

    nodejs做web服务器,打开80时报错:
    Error: listen EACCES 0.0.0.0:80

    80端口监听失败,是因为1024以下的端口需要root权限,需要sudo或su之后执行。但这又带来了NODE_PATH无效、权限等其他问题。权限问题通过chmod可解决。

    NODE_PATH无效,会导致通过-g全局安装的模块引用不了。需要在profile中配置:
    export NODE_PATH="/usr/local/lib/node_modules"

    profile有几个:
    在/etc/profile配置的,可以对任意用户登陆有效,但sudo执行时无效(解决方法在后面)。
    在~/.bash_profile中配置的,只对当前用户有效。
    在/var/root/.bash_profile配置的,对su之后对root用户有效。

    用node-inspector调试nodejs加载模块过程,如下:

    当前用户执行nodejs(1024以上的端口),require时会扫描这些目录:
    /apps/server/node_modules
    /apps/node_modules
    /node_modules
    /usr/local/lib/node_modules
    /Users/hz/.node_modules
    /Users/hz/.node_libraries
    /usr/local/lib/node

    su之后执行nodejs,require时会扫描这些目录:
    /apps/server/node_modules
    /apps/node_modules
    /node_modules
    /usr/local/lib/node_modules
    /var/root/.node_modules
    /var/root/.node_libraries
    /usr/local/lib/node


    sudo执行nodejs,require时会扫描这些目录:
    /apps/server/node_modules
    /apps/node_modules
    /node_modules
    /Users/hz/.node_modules
    /Users/hz/.node_libraries
    /usr/local/lib/node

    没有扫描/usr/local/lib/node_modules这个目录,原因是NODE_PATH变量没起作用。
    后来发现修改/private/etc/sudoers文件,把
    Defaults env_reset
    改为
    Defaults !env_reset
    可以解决这个问题。

  • 相关阅读:
    语文文法
    1223 递归下降语法分析程序设计
    有穷的自动机构造
    文法分析
    text
    0916 词法分析(3)
    "firstday"-软件工程
    实验四 递归下降语法分析程序设计
    构造该正规式的有穷状态自动机
    评论
  • 原文地址:https://www.cnblogs.com/hz-blog/p/5092226.html
Copyright © 2011-2022 走看看