使用npm时遇到Error: Invalid protocol

使用npm安装socket.io时遇到如下错误:

npm ERR! Error: Invalid protocol
npm ERR!     at Request.init (/opt/nodejs/lib/node_modules/npm/node_modules/request/main.js:308:31)
npm ERR!     at new Request (/opt/nodejs/lib/node_modules/npm/node_modules/request/main.js:103:8)
npm ERR!     at request (/opt/nodejs/lib/node_modules/npm/node_modules/request/main.js:962:11)
npm ERR!     at RegClient.makeRequest (/opt/nodejs/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:199:13)
npm ERR!     at RegClient.<anonymous> (/opt/nodejs/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:116:17)
npm ERR!     at RetryOperation.attempt (/opt/nodejs/lib/node_modules/npm/node_modules/retry/lib/retry_operation.js:56:8)
npm ERR!     at RegClient.regRequest [as request] (/opt/nodejs/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:113:13)
npm ERR!     at RegClient.get_ (/opt/nodejs/lib/node_modules/npm/node_modules/npm-registry-client/lib/get.js:112:8)
npm ERR!     at RegClient.<anonymous> (/opt/nodejs/lib/node_modules/npm/node_modules/npm-registry-client/lib/get.js:37:12)
npm ERR!     at fs.readFile (fs.js:176:14)
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

根据错误提示查看/opt/nodejs/lib/node_modules/npm/node_modules/request/main.js中相关代码:

  var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
    , defaultModules = {'http:':http, 'https:':https}
    , httpModules = self.httpModules || {}
    ;
  self.httpModule = httpModules[protocol] || defaultModules[protocol]
  console.log(protocol);
  console.log(self.proxy);
  console.log(self.tunnel);
  console.log(self.proxy.protocol);
  console.log(self.uri.protocol);
   if (!self.httpModule) throw new Error("Invalid protocol")

其中的console.log为新加入,用于查看到底是哪个参数导致invalid protocol。

结果发现self.proxy解析到错误的值(由于当前server无法访问互联网,在环境中需要设置http_proxy)。

{ protocol: '192.168.1.50:',
  host: '8010',
  hostname: '8010',
  href: '192.168.1.50:8010' }

想到,我在设置http_proxy没有带上协议。后来把http_proxy设置成http://192.168.1.50:8010,不再报错。

Over.

PS:经同事提示,我一直跟大家说http_proxy的设置时,基本都是带有http头的。这次真是自己坑了自己。

转载于:https://www.cnblogs.com/jiangyoucat/archive/2013/01/07/2849605.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值