V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fxjson
V2EX  ›  程序员

有没有用 node 写后端的?

  •  1
     
  •   fxjson · 2021-03-14 11:31:00 +08:00 via Android · 7165 次点击
    这是一个创建于 1352 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家有没有用 node 写后端的?最近用 koa 结合 ioredis,sequelize,winston 写了个玩具,写起来挺快的,有没有用 node 写生产环境后端的?通常你们结合 typescript 开发吗?尝试添加了下 typescript,感觉代码有点乱了,类型声明可用可不用,有的库需要安装 types 有的又不需要,有的库又没有 ts 声明文件
    47 条回复    2021-03-16 21:55:50 +08:00
    PeakFish
        1
    PeakFish  
       2021-03-14 12:09:15 +08:00 via iPhone
    用 egg
    hantsy
        2
    hantsy  
       2021-03-14 12:49:49 +08:00
    Nestjs 写舒服得多。
    hantsy
        3
    hantsy  
       2021-03-14 12:50:19 +08:00
    zengming00
        4
    zengming00  
       2021-03-14 12:58:28 +08:00
    写 node 后端三年,node 写起来确实很爽,但是项目一大维护起来就困难,尤其是多人开发的情况
    所以上 ts 是明智的
    zxCoder
        5
    zxCoder  
       2021-03-14 13:45:09 +08:00
    ts 一开始写着还挺好的,后来写着写着发现。。。那我干嘛不直接写 java 。。。
    fxjson
        6
    fxjson  
    OP
       2021-03-14 14:14:30 +08:00 via Android   ❤️ 1
    @zxCoder 是呢,我也这么想,为啥我不直接上 java 这种
    surfwave
        7
    surfwave  
       2021-03-14 14:17:47 +08:00
    工程化还是建议用 nestjs,egg 这些
    OldActorsSmile
        8
    OldActorsSmile  
       2021-03-14 15:10:01 +08:00
    云函数用 node 算吗?
    fxjson
        9
    fxjson  
    OP
       2021-03-14 16:09:17 +08:00 via Android
    @surfwave 说实话,不太喜欢 nest.js 的风格,egg 貌似网评不好
    fxjson
        10
    fxjson  
    OP
       2021-03-14 16:18:34 +08:00 via Android
    @hantsy 不太喜欢 nest 的风格
    lihongming
        11
    lihongming  
       2021-03-14 16:31:13 +08:00 via iPhone
    @zxCoder 因为 AWS Lambda 用 Node 速度最快,支持最全,所以用 Node 。

    但我想的是既然需要编译,何不直接用现成的语言,比如 Java,非得另行开发个 TS 呢?
    hantsy
        12
    hantsy  
       2021-03-14 17:47:19 +08:00
    NestJS 很大程序上利用了 Angular 的成果,对于大型项目,组织代码太重要了。
    hantsy
        13
    hantsy  
       2021-03-14 17:52:23 +08:00
    最近遇到比较坑的,我的 NestJS 例子配置了依赖自动更新,Mongoose 更新到 5.12 。


    Mongoose 从 5.11 自带 types (应该是用 TS 写了), 原来的 @types/mongoose 不需要了,但功能上不如原来 @types/mongoose 丰富, 导致很多 Jest 测试代码 Broken,mockResolvedValue, mockReturnedValue 都出了类型问题。
    hantsy
        14
    hantsy  
       2021-03-14 18:07:29 +08:00
    @fxjson 如果有足够的能力,可以从 NodeJS API (或者基于 Express ) 自己构建。

    NodeJS 框架中 express 依然是核心地位,太多第三方框架都是基于 express,或者提供了 Express 扩展. 另外 Fastify 相对比较新,以速度著称,好像在 NestJS 中也可以切换。从这个角度看 NestJS 可以核心还是比较有远见的, 封装了最流行的核心(默认用 express ),简化了工程化的所需要的一切元素(模块化代码结构,DI,安全,测试等)。

    其他的 NodeJS 框架,基本都是边缘化了,koa, sails 这些二等公民都算不上了。Meteor 算是个另类,提供一个定制化的 Node 环境,国外有不少用户,不知国内有没有人用,最初(1.0 之前)我是关注一下。
    bigggge
        15
    bigggge  
       2021-03-14 18:21:06 +08:00
    Koa 和 Express 该怎么选择?为啥说 Koa 二等公民都算不上?
    guanhui07
        16
    guanhui07  
       2021-03-14 18:40:54 +08:00 via iPhone
    koa2 还行
    fxjson
        17
    fxjson  
    OP
       2021-03-14 18:42:58 +08:00 via Android
    @bigggge 我也有此疑问,nest 之前大家都说推 koa,之后基本都是推 nest 了,不过鄙人不喜欢 nest 风格
    fxjson
        18
    fxjson  
    OP
       2021-03-14 18:43:42 +08:00 via Android
    @guanhui07 是,可以用 async,await 了,避免回调地狱
    rpxwa
        19
    rpxwa  
       2021-03-14 20:26:53 +08:00
    knives
        20
    knives  
       2021-03-14 21:08:01 +08:00
    没人用 https://nextjs.org/ 这类的混合框架?
    pastgift
        21
    pastgift  
       2021-03-14 21:22:37 +08:00
    还在用 Express... 做久了一大堆现成的代码,开发起来很快,也懒得换
    hareandlion
        22
    hareandlion  
       2021-03-14 21:32:05 +08:00
    用 express,上 ts,把 lint 配置作为代码文件的一部分上传...
    oliver2bao
        23
    oliver2bao  
       2021-03-14 21:48:53 +08:00
    用 egg 写过公司项目,自己写的项目都是 express 没有用到 ts,用 eslint 对代码格式化,然后用 husky 和 eslint 对代码格式进行提交前检查
    zieglar
        24
    zieglar  
       2021-03-14 22:08:53 +08:00
    想了解一下不喜欢 nestjs 的原因是什么?
    nestjs sailsjs loopback 我都用来做过一些项目,目前选择深耕在 nestjs
    Sapp
        25
    Sapp  
       2021-03-14 22:55:51 +08:00
    用 Nestjs,前端也能写一点后端,而且写起来非常简单,也不用操心项目规范和代码组织,反正他都定好了。本身基于 ts,写起来提示非常全面简单,文档都不咋用看。但是数据库我依旧玩不转
    zieglar
        26
    zieglar  
       2021-03-14 23:05:31 +08:00
    @Sapp typeorm 其实相对来说挺简单的,也有中文说明文档
    leopod1995
        27
    leopod1995  
       2021-03-15 01:04:11 +08:00
    三年 node 后端...
    从 Express-> Koa2 -> Nest -> Egg 总体来说是越写越舒服的。
    Express 算是 node 框架的基石,大多数现有框架都是基于 Express 二次开发。自己玩造轮子可以玩这个。
    Koa2 算是工业化的一个里程碑,写起来就是写 js 的感觉。
    Nest 基数大的最主要原因,就是因为 Java 后端转过来写的人多,完全 js 版本的 spring 框架风格,AOP, 对面向对象思维的后端很友好。我写起来感觉最不舒服的一点就是太重了。。 感觉是写 java 。
    Egg 也是基于 Koa2 二次开发的,目前来看开发效率还是挺高的,社区活跃,文档很好。

    生产 ts 还是要上的,真的是用了 ts 就回不去了,读别人代码舒服,自己写 focus 业务。
    wanguorui123
        28
    wanguorui123  
       2021-03-15 08:06:30 +08:00 via iPhone
    Node 写大型系统路过
    macha
        29
    macha  
       2021-03-15 08:52:41 +08:00
    5 年前写过,那个时候还是一片芒荒,callback hell 满天飞。现在应该好太多了。
    JoStar
        30
    JoStar  
       2021-03-15 09:47:53 +08:00
    我也很疑惑 nodejs 做后端的优势区间在哪儿?

    看到不少人说 nodejs 高并发性能很不错,但是没有找到具体数据说到底有多不错。

    而且,相比如 go 怎么样呢?
    (前端工程化中的 esbuild 就是利用 go 写的,性能完爆 JS 几条街)
    buzailianxi
        31
    buzailianxi  
       2021-03-15 09:55:31 +08:00
    用什么写都一样 curd 的多啊
    jmyz0455
        32
    jmyz0455  
       2021-03-15 10:15:25 +08:00
    @JoStar 同问。
    rbq123456
        33
    rbq123456  
       2021-03-15 10:26:30 +08:00
    @JoStar 优势区间主要是对前端来说不需要再去学一个新的语言就可以开发后台,至于性能,不太能比得上 golong
    yeze322
        34
    yeze322  
       2021-03-15 11:17:59 +08:00
    nestjs 。分清楚是“不喜欢”还是“不理解”nestjs 抽象解决的问题。
    nestjs 是 node 框架里为数不多知识经验可迁移至传统后端的了
    ERRASYNCTYPE
        35
    ERRASYNCTYPE  
       2021-03-15 11:25:28 +08:00
    看人,习惯不好写什么都够呛。
    js 没有说项目代码难以控制,完全是由于过于自由+缺少类型检查导致的,可以用 joi,可以写 jsdoc 。
    只是你用了 ts,上面的可以,都自带了。但是不保证就所有 npm 的包都支持 ts 调用,可能有部分需要自己写描述,但这一小部分也不一定就能碰到,真碰到了,说不定还能够混个 pr 。
    KouShuiYu
        36
    KouShuiYu  
       2021-03-15 11:36:55 +08:00
    公司的用 egg,自己的用 koa
    zivyou
        37
    zivyou  
       2021-03-15 12:38:58 +08:00
    用过两年 koa2,项目做大了还是有点麻烦。1. 公司内部的 node 生态不够好,一些部件没有 node sdk 。2. JS 自身的面向对象有点难受,强行上各种设计模式会很蹩脚; 但是不上的话,代码的维护和迭代有很是问题
    wednesdayco
        38
    wednesdayco  
       2021-03-15 14:06:36 +08:00
    nest 在做中间层应用 并发确实不错 写起来基本没啥大问题,
    fxjson
        39
    fxjson  
    OP
       2021-03-15 22:29:19 +08:00 via Android
    @zieglar 概念多,
    @oliver2bao 亲,您用 eslint 开发 node 项目有最佳实践吗,可以分享下您的 eslintrc 文件吗,有用--fix 有些常规错误修复不了呢,比如变量没有使用,多分号了等等
    taowen
        40
    taowen  
       2021-03-15 22:35:34 +08:00
    @JoStar 如果前端是一个独立的 typescript 工程,后端是一个独立的 typescript node.js 工程,两者之间的 typescript 没有 import type 的关系。我也觉得后端拿 node.js 写没啥好处,不如用 java 。至少也要做到部分类型定义的复用,如果业务上有需要,还可能要做到部分代码的一致性保证(比如前后端算两遍价格,前后端做两遍验证)。
    weimo383
        41
    weimo383  
       2021-03-16 08:51:13 +08:00 via Android
    @rbq123456 但是 node 比 python 快
    myCupOfTea
        42
    myCupOfTea  
       2021-03-16 09:02:55 +08:00
    typescript 写起来太舒服了
    这么舒服 为啥要去写 java(跑
    myCupOfTea
        43
    myCupOfTea  
       2021-03-16 09:05:05 +08:00
    @taowen 早就有全程类型安全的框架了
    从数据库到前端都是类型安全的,虽然我不写 node(
    chogath
        44
    chogath  
       2021-03-16 10:20:22 +08:00
    有,我写了一个简单可上手的模板,包含网关,用户中心,基础服务,可以看下
    oliver2bao
        46
    oliver2bao  
       2021-03-16 21:40:32 +08:00
    @fxjson [nodejs 项目自动格式化方案]( https://bubao.github.io/2020/09/16/nodejs%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%96%B9%E6%A1%88/)

    eslint 主要是看 eslint 的官网,另外别 prettier 和 eslint 一起用
    oliver2bao
        47
    oliver2bao  
       2021-03-16 21:55:50 +08:00
    @JoStar 首先 nodejs 的代码是 js,写起来舒服,实现什么功能也快,虽然比不上 python,但是和 java 比起来真的快很多。
    go 我也在学习,但是 go 的包是扔在 github 上的,相比于 nodejs 和 python 的包管理真的差很远,不知最近 go 的包管理有什么进展。
    是否高并发不错我真不好说,和 go 这种基因自带高并发的语言相比,nodejs 的事件驱动异步回调似乎没有那么的高大上。go 是编译运行的,性能是肯定是比 nodejs 这种 script 解释执行快的。但是纵观其他语言,脚本语言能有 nodejs 这样速度的好像真没有,甚至比很多编译执行的语言都快。
    go 和 nodejs 都是 08 年左右开始开源的,如果 go 能把一些想包管理这种痛点解决掉的话,我估计会用 go 去做一些好玩的项目吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 05:35 · PVG 13:35 · LAX 21:35 · JFK 00:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.