风の愿 » NODE.JS

npm 混合公共仓库和私有仓库

需求

  1. 私有包托管在内部服务器中

  2. 项目中使用了公共仓库上的公共包,也使用了内部服务器上的私有包

  3. 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库

解决

可以借助 npm 的 scoped package 功能,并配上 cnpmjs.org 搭建私有仓库,来解决上述需求。

Read More »
Published @ 16th February, 2016

解决 node-gyp rebuild 时的假死问题

最近 npm install 时候经常遇到在 node-gyp rebuild 那里卡很久的情况(大于十分钟),于是研究了一下输出的错误日志解决了这个问题,在这里分享一下。

首先,请检查 node-gyp 需要的 Python 和编译工具链是否已安装:

On Unix:

  • python (v2.7 recommended, v3.x.x is not supported)
  • make
  • A proper C/C++ compiler toolchain, like GCC

如果检查下来这几项都没问题的话,可能是 Node.js 源码缺失的原因。

这其实又是一个天朝独有的问题,主要原因是 node-gyp 编译时候需要 Node.js 源码来提供头文件,所以它会先尝试下载 Node.js 源码;而在天朝墙外 CDN 经常抽风,有时候下载 Node.js 源码奇慢无比,如我这里就只有 3KB/s,那么自然要卡很久。

Read More »
Published @ 14th November, 2014

Node.js 中使用 request 请求 GBK 页面

Node.js 有个很方便的 request 模块,提供了易于使用的接口向远程页面发起请求。然而,默认情况下它只能请求 UTF-8 的页面。

为了能让它请求 GBK 页面,还需要使用 iconv 模块转换字符集。

需要注意,request 的 encoding 参数必须设置为 null,否则它会先将其以字符串方式连接导致内容损坏。

Example:

var request = require('request');
var Iconv = require('iconv').Iconv;
var iconv = new Iconv('GBK', 'UTF-8//TRANSLIT//IGNORE');

request.get({
    url: 'http://foo.bar',
    encoding: null
}, function(err, res, body) {
    console.log(iconv.convert(body).toString());
});

See also:

自动转换字符集

Published @ 10th August, 2013

struts2 (S2-016) exploit script

最近冒出来了一个 struts2 的 0day ( S2-016 )。

FreeBuf 26# 上有人贴了一个 Python 版的 exploit,由于我不熟悉 Python,并且那个脚本有一些很不爽的 bug(如不支持多参数),所以我对它进行了一些改进并改成了 Node.js 版,供大家娱乐。

Read More »
Published @ 21st July, 2013
1