V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yzhen123
V2EX  ›  Node.js

如何用 10 行 nodejs 代码开发一个 google 镜像站

  •  2
     
  •   yzhen123 · 2017-05-31 20:13:56 +08:00 · 5028 次点击
    这是一个创建于 2492 天前的主题,其中的信息可能已经有所发展或是发生改变。

    嘿嘿,其实是有点标题党了。。

    Google 的首页的静态资源并没有使用 CDN,实现起来其实是比较简单的,如果有 CDN 的话还需要用正则替换静态链接。这里使用了 koa-proxy,虽然是下载之后再转发可能会带来一定的性能影响,不过可以使用 koa 的中间件对响应进行修改,如果用 koa-http-proxy 的话就没这么容易了。。

    
    const Koa = require('koa')
    const proxy = require('koa-proxy')
    const mount = require('koa-mount')
    const convert = require('koa-convert')
    const app = new Koa();
    const zlib = require('zlib')
    
    app.use(convert(function * (next) {
      yield next
      if (this.path === '/' || this.path === '/search') {
        const data = yield zlib.gunzip.bind(zlib, this.body)
        const str = data.toString('utf-8').replace(/<body([^>]*)>/, `<body$1>
      <div style="font-size: 14px; text-align: center; padding: 3px 10px;">Powered By <a href="https://www.lets-ss.com">lets-ss.com</a></div>
    `)
        this.body = yield zlib.gzip.bind(zlib, str)
      }
    }))
    
    app.use(convert(proxy({
      host: 'https://www.google.com.hk', // 目标站 点
      jar: true, // 转发 cookie
      followRedirect: false, // co-request 的参数,不跟随跳转
    })));
    app.listen(80);
    
    

    测试可以使用 proxychains 让命令行走代理

    proxychains node ./index.js
    

    顺便分享一下我搭建的站点: https://g.lets-ss.com

    16 条回复    2017-06-02 13:47:17 +08:00
    ixiaohei
        1
    ixiaohei  
       2017-05-31 20:19:46 +08:00
    反代,不过你网站速度真慢
    Showfom
        2
    Showfom  
       2017-05-31 20:20:49 +08:00
    这样公开域名很容易被墙的
    yzhen123
        3
    yzhen123  
    OP
       2017-05-31 20:22:18 +08:00
    @ixiaohei 额,可能是有些广告或者统计链接还是走了 google 的域名
    des
        4
    des  
       2017-05-31 20:23:58 +08:00 via Android
    数了一下,不止 10 行,lol
    yzhen123
        5
    yzhen123  
    OP
       2017-05-31 20:25:10 +08:00
    @des 其实 如果去掉修改网页内容的代码,加起来也只有 10 行多一点
    yzhen123
        6
    yzhen123  
    OP
       2017-05-31 20:28:32 +08:00
    @Showfom 是吗?谢谢关系,不过没关系,现在节点比较多,玩完了就撤。。
    yzhen123
        7
    yzhen123  
    OP
       2017-05-31 20:29:06 +08:00
    @Showfom 谢谢关心。。
    KIDJourney
        8
    KIDJourney  
       2017-05-31 20:36:07 +08:00
    说什么一共 10 行,你考虑过 Koa 的感受吗?
    yzhen123
        9
    yzhen123  
    OP
       2017-05-31 20:45:45 +08:00
    @KIDJourney 嘿嘿,其实是有点标题党哈,第一行就已经承认了,求各位大佬轻喷
    est
        10
    est  
       2017-05-31 21:20:01 +08:00
    如何一行代码都不写用 nginx 实现无痛人流

    /t/341913
    douglas1997
        11
    douglas1997  
       2017-06-01 00:02:46 +08:00
    package.json 可以共享一下吗?
    eccstartup
        12
    eccstartup  
       2017-06-01 00:26:18 +08:00 via iPhone
    @douglas1997 这是什么鬼
    douglas1997
        13
    douglas1997  
       2017-06-01 07:26:04 +08:00
    @eccstartup ?? nodejs 程序不是需要 packages.json 然后安装依赖?不知道楼主 koa 是什么版本。
    loadinger
        14
    loadinger  
       2017-06-01 09:11:47 +08:00
    nodejs 会被你们这样搞臭的.别取这样的名字好么..
    Dye8
        15
    Dye8  
       2017-06-01 10:56:56 +08:00
    10 行还不简单 楼主快去几个换行
    470326964
        16
    470326964  
       2017-06-02 13:47:17 +08:00
    @Dye8 标题党。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3195 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 11:34 · PVG 19:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.