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
    可以解决这个问题。

  • 相关阅读:
    python note 19 异常处理
    python note 18 序列化模块
    python note 17 random、time、sys、os模块
    python note 16 re模块的使用
    python note 15 正则表达式
    python note 13 内置函数
    python note 12 生成器、推导式
    C++ int型负数除法取余问题
    Leetcode162. 寻找峰值
    Leetcode450. 删除二叉搜索树中的节点
  • 原文地址:https://www.cnblogs.com/hz-blog/p/5092226.html
Copyright © 2011-2022 走看看