V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Pastsong
V2EX  ›  JavaScript

Facebook 开源的 Parse 后端代码节选...

  •  
  •   Pastsong · 2016-01-31 12:36:09 +08:00 · 5341 次点击
    这是一个创建于 3204 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天早上看到微博上喵大 @onevcat 在吐槽这段代码

    https://github.com/ParsePlatform/parse-server/blob/master/RestWrite.js#L704-L715

    // Returns a string that's usable as an object id.
    // Probably unique. Good enough? Probably!
    function newObjectId() {
      var chars = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
                   'abcdefghijklmnopqrstuvwxyz' +
                   '0123456789');
      var objectId = '';
      for (var i = 0; i < 10; ++i) {
        objectId += chars[Math.floor(Math.random() * chars.length)];
      }
      return objectId;
    }
    

    如果大家来写这一段代码应该会怎样写?

    19 条回复    2016-02-17 10:31:45 +08:00
    int64ago
        1
    int64ago  
       2016-01-31 12:38:46 +08:00
    简单粗暴有效……

    不过现在貌似都是直接用 MongoDB 的 ObjectId 吧
    sox
        2
    sox  
       2016-01-31 12:54:14 +08:00
    zsx
        3
    zsx  
       2016-01-31 12:55:12 +08:00
    whimsySun
        4
    whimsySun  
       2016-01-31 13:13:56 +08:00
    大致看了下,这个只是一个兼容原 api 的 api 服务端代码
    vincentxue
        5
    vincentxue  
       2016-01-31 14:14:26 +08:00 via iPhone
    不必太在意,这个不是真正的,真正的是用 Go 写的。
    pynix
        6
    pynix  
       2016-01-31 14:35:30 +08:00
    简单。。。
    9999999999999999
        7
    9999999999999999  
       2016-01-31 14:39:28 +08:00 via Android
    人家都说了 只是 nodejs 的实现而已。
    sjtlqy
        8
    sjtlqy  
       2016-01-31 16:52:10 +08:00
    fb 的不都这样吗,快速开发实现.
    hackthon 的
    wuchizhitu1988
        9
    wuchizhitu1988  
       2016-01-31 17:16:20 +08:00
    uuid
    matsuijurina
        10
    matsuijurina  
       2016-01-31 17:33:28 +08:00
    ruby 一行就可以了吧。 [*('a'..'z'),*('A'..'Z'),*('0'..'9')].shuffle[0,9].join
    plqws
        11
    plqws  
       2016-01-31 17:41:20 +08:00
    他吐槽的是碰撞几率吧,而且插入之前不会去验证一下是不是已经存在了吗
    bingwenshi
        12
    bingwenshi  
       2016-01-31 17:54:04 +08:00
    @plqws 这种验证应该调用这个方法的地方,自己去验证吧
    cloudzhou
        13
    cloudzhou  
       2016-01-31 20:38:49 +08:00
    其实我觉得这个没有什么问题。
    如果要强制 unique ,需要在数据库做一下主键限制
    plqws
        14
    plqws  
       2016-01-31 23:12:40 +08:00
    @bingwenshi 我就是这个意思…所以认为那个人注释的槽点很奇怪
    jetbillwin
        15
    jetbillwin  
       2016-02-01 01:16:16 +08:00
    本来就不是 node ,生产环境以前从 Rails 转到 Go 了
    pynix
        16
    pynix  
       2016-02-01 03:12:15 +08:00
    @plqws 数据量很大要判断存在应该是个坑吧。
    beneo
        17
    beneo  
       2016-02-01 10:36:48 +08:00
    看了一圈,不知道这个是干嘛的,谁能科普一下
    rekey
        18
    rekey  
       2016-02-16 17:50:39 +08:00
    @beneo 生成 id 。
    beneo
        19
    beneo  
       2016-02-17 10:31:45 +08:00
    @rekey Parse 问的是这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2765 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:56 · PVG 09:56 · LAX 17:56 · JFK 20:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.