干货 | Node.js在携程的落地和最佳实践

干货!如何用Node.js实现一个精巧的P2P网络 加密货币都是去中心化的应用,去中心化的基础就是P2P网络,其作用和地位不言而喻,无可替代。当然,对于一个不开源的所谓私链(私有区块链),是否必要,尚无定论。事实上,P2P网络不是什么新技术。但是,使用Node.js开发的P2P网络,确实值得围观。这一篇,我们就来看看Ebookcoin的点对点网络是如何实现的。源码主要源码地址:peer.js: https://github.com/Ebookcoi... 阅读详情

作者简介

 

潘斐斐,Trip.com高级研发经理。2008年加入携程,目前工作内容为Node.js框架平台整体构建、产品性能优化和创新型项目研发。本文来自在2019携程技术峰会上的分享。

本篇主要介绍在携程,Node.js技术栈是如何实现从0到1进行技术落地的,以及在不断磨合的过程中,总结出来的最佳实践。

 

在携程Node.js应用根据用户群,主要分两个方向:

DA(数据聚合服务)和SSR(服务端渲染)是服务于外部用户的,目标是提升用户体验。当然,DA和SSR同时也提升了开发效率,例如前端开发人员可以更加灵活的整合数据,例如同构给开发人员省去了大量重复的开发工作量;

公司桌面工具(例如内部IM等)是服务于内部员工的,一般是用Electron,开发维护成本低,产品迭代快。

 

一、Node.js工程化

基于上述三个场景,目前携程有一套Node.js的工程化方案。工程化的方案并不是一成不变的, 在任何阶段遇到了实际问题, 都会更新甚至推翻一些步骤,为的就是更好的服务于整个应用开发的生命周期。

工程化涵盖五大部分:开发、构建、测试、发布和运维。

1.1 开发

1)脚手架

有三个类型的脚手架:Web Application、DA Service和Desktop Tools。这三种类型的脚手架会服务于上述提到的三种场景。

这三种脚手架有共同点:标准化的Docker日志,预置统一的中间件。但同时他们也是有差异的,例如Desktop Tools和Web Application的应用模型不一样,Desktop有UI层,那么UI层和应用层上的应用日志和用户行为如何关联,方便后续的排障;DA Service需要将应用的健康状况周期性上报给治理中心、熔断机制等等,这些框架层面的差异,脚手架会集成进去,做业务开发同学可以不用关心这些基础设施的接入。

2)核心中间件

核心中间件主要是做基础设施的建设。目前有20多个中间件,主要的中间件如下:

图1 核心中间件介绍

  • 存储服务,主要应用于长期的固化存储,例如静态资源。主要提供的是Ceph客户端。

  • 业务服务,主要应用于DA场景,提供SOA Client和SOA Service。SOA Client用来获取数据,需要重点关注的是读取性能和容错处理;SOAService用来提供对外的聚合服务,需要重点关注的是稳定性和响应性能。

  • 监控服务,涵盖所有的应用,提供三个维度的监控:Tracing、Metrics和Logging。具体的介绍请参看下方”运维”部分。

  • 公共服务,主要包括配置中心,ABTest的客户端、数据访问层等。

  • 缓存服务,主要用于配置信息的缓存、应用数据的缓存。提供Redis客户端和共享内存两个中间件。


1.2 构建

1)Docker镜像

Node.js的版本更新频率很快,每6个月会发布一个大版本的升级,期间会陆续出很多小版本。如果为每个版本都做一个镜像,会带来极高的开发和运维成本。基于更新频率,我们目前选取2个固定版本,在Node.js版本更替的时候,可以保证一个稳定的镜像。

2)安装依赖包

为了提升开发效率,在构建时安装依赖包需要保证速度快。如果中间件中用到一部分C++模块,那么在安装时会做实时编译,这样会导致耗时长,甚至会因为环境问题编译失败。所以我们会将用到C++模块的中间件做一下预编译,为windows、linux和mac这三个平台分别编译出2个固定版本的预编译包。

3)依赖包扫描

扫描的目的主要解决几个问题:

  • 应用中不同的包如果引用了同一个子包,但是子包的版本不一致,就会导致应用中装了多个版本同一个包,会引发bug;

  • 中间件缺乏治理能力。通过扫描依赖包,能够做到中间件统一收口。一旦要升级,可以很快的通知到开发做快速升级。例如第三方依赖包有安全问题,可以在构建环节就提醒开发人员升级版本。

1.3 测试

目前测试环节包括单元测试、集成测试、压力测试和自动化测试。自动化测试主要针对Service和UI两方面测试。UI自动化测试使用的是Puppteer。每次代码更新,会走一遍自动化测试流程,保证代码质量。


1.4 发布

1)携程云和公有云

每个云的部署环境、网络、位置等差异,会带来应用访问差异,例如访问异常,网络延迟等。这些差异需要在基础设施层面抹平,避免放在应用逻辑层面处理。

2)应用一体化发布

一体化发布也可以理解为一键发布。一条发布指令包含了应用核心框架、静态资源、配置的同时发布,而不需要开发人员思考什么步骤需要发什么资源。这样不仅可以提升效率,还能有效的控制发布回滚。

3)私有npm包发布

私有包的发布和GIT做高度集成。原因是:第一可以通过git做快速的发布;第二有历史可查,方便的查看到每个版本发布的时间、人员;第三有权限控制,避免发生生产级别故障。


1.5 运维       

运维是整个环节中最重要也是最容易被忽略的环节。一个应用上线只是开始,真正要关注的一定是运维指标。

1)日志监控

三种维度的监控:tracing、logging和metric。

图2 三种维度的监控 

图片来源于网络:http://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html 

 

Tracing提供的是整个请求过程中的数据,例如请求信息(头部、地址)、响应信息(状态码,响应体)、请求耗时、调用链等信息。

Logging提供的是在请求处理过程中,每一个具体的事件埋点,这些埋点相对是分散的。可以是记录普通的日志,也可以是记录抛出的错误。

Metric提供的是聚合数据。最大的特征是可聚合的,它展现的是一个时间跨度中的某个维度的指标。一般用来记录量化的指标,例如访问量、性能等数据。

2)应用排障

一般我们排查问题的时候,会先通过Metric的聚合指标发掘出异常,然后追踪到某一批有异常的Tracing,可以查看到调用链、耗时等具体情况,也可以跟踪到某一个请求,查看里面的事件埋点。

也有其他方式的排障,例如下图中展示,可以在线直接通过一个特殊的地址访问到的一张火焰图,可以非常快速地去排障。当有用户说这个页面出现问题,打开这个页面排障,可以定位到底那个对应的地方出现问题。

图3 火焰图

 

二、Node.js最佳实践

2.1 部署模型

图4 部署模型

Node.js应用部署在Docker上,采用Nginx+PM2的模式。

 

2.2 问题一:多进程通信

多进程通信主要用于数据交换,最常见的有2种场景:

1)提供SequenceId:在单台机器需要提供唯一的并且按时间序列排列的ID。

2)提供远端配置信息:当获取远端配置信息时,需要考虑多进程的共享分发。

图5 多进程通信V1.0

在第一版本设计中,我们采用的是IPC机制进行多进程的通信。Master作为一个中转站,当Slave有消息分发时,通知给Master,再由Master分发给各Slave,从而达到进程之间通信的效果。

但是上线之后发现,这样的机制会遇到几个问题:数据量必须控制好体积;数据的同步会有延迟;Master必须时刻在线,一旦Master进程挂掉,就需要等待重启再重连。

 

基于这些问题,我们重新设计了第二个版本:

图6 多进程通信V2.0

在第二个版本的设计中,我们使用了共享内存(shared memory)。举一个场景为例,当需要获取某个配置的时候,先将这块内存锁定,尝试从内存中获取数据。如果判断数据存在且在有效期内,那么解锁并从内存中读取数据返回,否则从服务端获取数据,当服务端有数据返回时,将数据和有效期更新到内存中,解锁并从内存中读取数据返回。通过共享内存的机制,可以非常轻量级且高效的实现多进程之间的数据共享。

 

2.3 问题二:监控什么内容 

图7 监控指标

 

Nginx会监控整个Docker上所有应用的情况:

  • CPU util:CPU总的使用率。

  • CPU throttle count&time:CPU被限制的次数和CPU使用率被限制的总时间。这两个指标的上升一般表示应用有CPU密集型操作,需要检查一下是否有大量的计算等操作。

  • Mem RSS used:这个指标上升一般显示应用内存泄漏的问题。

  • HTTP imcoming&outgoging:http request的数量变化趋势。如果有错误响应或者超过了告警的阈值,则会在趋势图中显示。

  • Connection reset:这个指标如果上升,表示应用出现了大量的拒绝请求,例如是服务器的并发数超过了原本的承载量等原因。

 

Nginx中监控的是整个Docker的情况,但是我们更需要的是监控应用的指标。应用一般采用PM2 cluster –i max模式启动,最大化利用CPU。

  • Heartbeat(心跳信息)

每个slave一分钟发送一次Heartbeat(心跳信息)给到CAT数据中心。一般来说,如果Heartbeat告警的话,需要立刻查看一下错误日志,是不是有异常错误导致进程已经退出了。

Heartbeat主要包括CPU、Memory、网络信息等。这些信息和上述提到的Nginx信息不是一个维度的。这个更细节的关注了应用的情况,而不是整个Docker的情况。如果需要分析应用细节的问题,是需要查看这里的Heartbeat信息。

  • 性能情况

一般来说,中间件会处理应用常规的性能日志记录。包括:

1)每一个响应的请求耗时(服务端逻辑处理耗时,不包括网络耗时)。

2)每一个Transaction的耗时。一个Transaction可以简单理解为一个有功能意义的代码片段。

3)跨应用调用的请求耗时。

  • 错误/告警信息

错误告警信息是应用中需要重点关注的,包括:

1)应用逻辑出错,例如处理JSON数据出错等。

2)HTTP请求出错,会记录状态码、请求地址、返回内容。

3)应用中使用了不同版本的同一个包,会报一条告警信息通知开发工程师。

  • 详细数据日志

详细数据日志一般有开发工程师针对应用的逻辑埋点,而非中间件统一处理。这些日志会包括返回数据的记录,具体运行在哪一段transaction中。这些日志一般是故障发生时,用来复盘时的辅助手段。

 

2.4 问题三:全链路监控

全链路监控指的是端到端的监控,监控的是一系列的调用链情况。

 

图8 Tracing模型

在介绍全链路模型之前,首先介绍Tracing模型(图8)。Tracing模型是一个树状结构的模型。以一个场景为例,当用户发起一个请求,这个请求的处理中有三段逻辑(authentication、soa request和data aggregation)。

在整个请求体外层会有一个Transaction#1,记录请求响应等信息。每一个逻辑段会对应一个Transaction#2,Transaction#2的父节点是Transaction#1。Transaction#2中可以有多个Logging信息,根据类型可以分为Event/Error/Log,也可以包含Metric信息。这些Logging和Metric都有父节点,是Transacation#2。按照这样的结构可以将一整个request的过程的监控信息记录下来。

 

要做全链路监控,就是需要将每个request和调用链做关联。

在过程中遇到的最核心的问题是,如何将上下文进行关联。第一个版本使用的是domain的模块,使用domain的add api将上下文信息记录下来,使用run api运行逻辑代码块。第二个正在测试中的版本是使用async_hook的模块,引入了生命周期的概念,通过executionAsyncId和ttriggerAsyncId可以追踪每个函数体。

 

图9 页面请求模型

通过上图的页面请求模型可以将每个请求做关联,从而达到全链路监控的效果。


三、总结

  • Node.js工程化需要结合业务,反复磨合;

  • 设计好运维指标,做好Tracing/Logging/Metric的结合;

  • 密切关注上线之后的监控指标,防止内存泄漏;

  • 发掘出Node.js技术栈的差异,有针对性的解决问题;

  • 不要盲目相信同一个技术栈,合适才是最好的。

注:携程技术中心微信公众号后台回复“nodejs”,可下载讲师PPT。

【推荐阅读】

 “携程技术中心”公众号

  分享,交流,成长

UDP协议详解——使用Socket通信 UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号。它没有握手对话,因此将用户的程序暴露在底层网络的任何不可靠的方面。 阅读详情

相关推荐

豆包大模型API调用两种方法

ps: 因为是自用,所以这里图方便采用硬编码密钥的形式;如果有需求/安全风险,建议参考官方教程设置ARK_API_KEY环境变量的方式。坏处是:看别人的教程走了一大圈弯路hh;基础调用的话方法一就可以满足了,也比较方便快捷,容易上手。将 <Model> 替换为 Endpoint ID即可。创建就按照提示填写信息就行,需要实名认证,有免费额度。绿框框里就是Endpoint ID。

kkkkkkkkkasey的博客 1万+

Javascript 中的协程是怎么一回事

Javascript 中的协程是怎么一回事

代码说,代码让世界更美好。 1130

USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计

USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系

weixin_42153793的博客 244

JS 使用协程处理事件

ES6 引入了一个新的关键字 `yield`,用它可以实现发生器(generator)和协程(coroutine)。其中,协程有个很有趣的应用是用作事件循环。有了协程,对于事件的处理,除了传统的 “回调函数+状态” 方案外,我们又多了一个选择。

1bite 的专栏 1592

【2025CVPR】基于脉冲神经网络的能效目标检测模型:Multi-scale Spiking Detector(MSD)深度解析

本文提出了一种创新的多尺度脉冲神经网络目标检测器(MSD),通过生物启发的ONNB模块和MSDF框架实现了高效准确的目标检测。该模型采用端到端直接训练策略,在COCO数据集上达到62.0%mAP的精度,同时仅需7.8M参数和6.43mJ能耗,较传统方法提升2.8%精度并降低82.9%能耗。实验验证了其在小目标检测和事件数据处理的优越性,为边缘计算应用提供了新范式。

hasakie的博客 1109

创建动态代理对象bean,并动态注入到spring容器中

使用过Mybatis的同学,应该都知道,我们只需要编写mybatis对应的接口和mapper XML文件即可,并不需要手动编写mapper接口的实现。这里mybatis就用到了JDK动态代理,并且将生成的接口代理对象动态注入到Spring容器中。 这里涉及到几个问题。也许有同学会有疑问,我们直接编写好类,加入@Component等注解不是可以注入了吗?或者在配置类(@Configuration)...

lichuangcsdn的博客 3万+

Generator 函数的含义与用法

异步编程对 JavaScript 语言太重要。JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可。 以前,异步编程的方法,大概有下面四种。 回调函数 事件监听 发布/订阅 Promise 对象 ECMAScript 6 (简称 ES6 )作为下一代 JavaScript 语言,将 JavaScript 异步编程带入了一个全新的阶

阿利的技术积累 966

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1575

javascript基础-多线程、携程

js任务分同步任务和异步任务。 在异步任务中,分为宏任务和微任务。 通常微任务的执行是在当前主线程宏任务执行完毕之前,当前没有可执行的微任务时,才会开启下一个宏任务。

quanxin0222的博客 1735

6、基于深度强化学习的无人机路径规划

本文介绍了一种结合人工势场法的改进DQN深度强化学习算法在无人机路径规划中的应用。通过设计合理的网络结构、状态空间、动作空间和融合引力-斥力机制的奖励函数,实现了无人机在复杂环境中的自主避障与目标导向飞行。采用轻量级神经网络提升实时性,并在Gazebo仿真环境中进行训练与测试,结果表明该算法具有快速收敛、高成功率和良好适应性。实验评估指标包括损失函数、最大Q值和任务成功率,验证了方法的有效性。文章还探讨了其在物流配送、农业植保和环境监测等领域的应用前景,并展望了多无人机协同与复杂环境适应性等未来研究方向。

html8的博客 238

探秘RK3588:OverlayFS挂载与固件升级全攻略

本文围绕RK3588芯片的OverlayFS文件系统挂载与固件升级技术展开详细阐述。首先介绍了RK3588芯片的卓越性能及其在嵌入式领域的广泛应用,重点分析了OverlayFS文件系统的分层架构原理及其在RK3588设备上的挂载方法,包括详细的挂载步骤、常见问题解决方案。随后详细阐述了RK3588设备在Windows和Linux环境下的固件升级方案,涵盖升级准备、具体操作流程及故障处理等内容。最后通过智能安防监控设备的实际案例,展示了OverlayFS挂载与固件升级技术的应用效果。文章为嵌入式开发者提供了全

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 286

【云原生】Trace、Metrics、Logging 选型

OpenTracing 的优势在于制定了一套无关厂商、无关平台的协议标准,使开发人员只需要修改 Tracer 就可以更迅捷的添加或更换底层监控的实现,被追踪的服务只需要调用相关 API 接口,就可被任何实现这套接口的追踪后台支持。在上述的项目中有两个项目较为特殊:其一是OpenTracing,他制定了一套无关平台的统一的Trace的标准,后续的很多项目例如Jaeger等都是基于此协议,因此他在当时的Trace标准领域具有不小影响力;许多语言都带有类型定义,可以在实现中使用,例如用于创建可重用组件的接口。

蓝天之枫 1817

大模型产品Deepseek(七)、可视化本地知识库搭建详细教程(Cherry Studio)

Cherry Studio 为智能体的开发提供了一个强大的可视化平台,结合大模型和嵌入式知识库,它可以在多个应用场景中提供智能化的支持。如果你有进一步的需求或问题,可以继续在 Cherry Studio 中进行更多自定义配置,或者通过 API 调用集成到你的应用中。现在,知识库已经搭建并与 DeepSeek 模型连接好,接下来,我们将使用 Cherry Studio 提供的可视化界面进行智能提问。为了让智能体能够通过大模型查询到知识库中的信息,你需要为知识库配置索引和匹配模型。

xiaoqi270620903的专栏 1332

干货 | 浅谈Node.js在携程的应用

作者简介潘斐斐,携程无线平台研发部高级研发工程师。2008年加入携程,目前负责携程Node.js技术栈的基础平台研发工作。携程在2017年9月份正式上线了Node.js应...

程序员成长指北 388

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

js 点击选择前和选择后的数据对比_干货 | 浅谈Node.js在携程的应用

作者简介潘斐斐,携程无线平台研发部高级研发工程师。2008年加入携程,目前负责携程Node.js技术栈的基础平台研发工作。携程在2017年9月份正式上线了Node.js应用,本文主要介绍近两年Node.js技术栈在携程的应用和体系情况。一、技术栈1.1 应用部署应用部署主要分为以上四个步骤:Develop-> Build ->Release -> PublishCodi...

weixin_39883065的博客 307

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

js 怎么建立外部公共指标_干货 | 浅谈Node.js在携程的应用

作者简介潘斐斐,携程无线平台研发部高级研发工程师。2008年加入携程,目前负责携程Node.js技术栈的基础平台研发工作。携程在2017年9月份正式上线了Node.js应用,本文主要介绍近两年Node.js技术栈在携程的应用和体系情况。一、技术栈1.1 应用部署应用部署主要分为以上四个步骤:Develop-> Build ->Release -> PublishCodi...

weixin_31907553的博客 178

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

js代码将用户的session信息以及缓存信息全部清空_干货 | 携程机票Node.js开发实践...

走得最慢的人,只要他不丧失目标,也比漫无目的地徘徊的人走得快。‑‑‑‑‑‑莱辛作者简介付文平,携程机票研发部前端开发总监。2011年加入携程,主要负责携程机票PC、H5、Hybrid业务方面的开发工作。先后负责机票PC前后端分离,H5 Swift改版,机票React Native技术的推进,重点关注Node.js技术和产品体验。本文来自付文平在“2018携程技术峰会”上的分享。Nod...

weixin_39540834的博客 257

干货 | 携程基于 GraphQL 的前端 BFF 服务开发实践

作者简介工业聚,携程高级前端开发专家,react-lite, react-imvc, farrow 等开源项目作者。兰迪咚,携程高级前端开发专家,对开发框架及前端性能优化有浓厚兴趣。一、前言过去两三年,携程度假前端团队一直在实践基于 GraphQL/Node.js 的 BFF (Backend for Frontend) 方案,在度假BU多端产品线中广泛落地。最终该方案...

携程技术 2319

《The Node Beginner Book》- Node.js环境和浏览器环境下的JS

JavaScript and You Before we talk about all the technical stuff, let's take a moment and talk about you and your relationship with JavaScript. This chapter is here to allow you to estimate if reading...

wendZzoo的博客 478

Node.js模块化开发(非常详细,满满的干货)

下面是对Node.js模块化开发的整理,西洼港可以帮助到有需要的小伙伴~ 文章目录Node.js模块化开发JavaScript开发弊端Node.js模块化开发模块成员导出的export方法模块成员导出的另一种方法module.exports系统模块什么是系统模块系统模块fs 文件操作读取文件内容写入文件内容系统模块path路径操作相对路径VS绝对路径第三模块(包)什么是第三方模块第三方模块有2种存在形式获取第三方模块4.3第三方模块nodemon第三方模块 nrm第三方模块GulpGulp能做什么Gulp

weixin_46370867的博客 625

【硬核干货】Node.js 底层原理

作者介绍:陈跃标,ByteDance Web Infra 团队成员,目前主要负责 Node.js 基础架构方向的工作大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众...

程序员成长指北 824

干货 | Islands Architecture(孤岛架构)在携程新版首页的实践

作者简介携程前端框架团队,为携程集团各业务线在PC、H5、小程序等各阶段提供优秀的Web解决方案。当前主要专注方向包括:新一代研发模式探索,Rust构建工具链路升级、Serverless应用框架开发、在线文档系统开发、低代码平台搭建、适老化与无障碍探索等。一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过...

携程技术 3935

干货 | 走进Node.js之启动过程剖析

作者:正龙 (沪江Web前端开发工程师)本文原创,转载请注明作者及出处。 随着Node.js的普及,越来越多的开发者使用Node.js来搭建环境,也有很多公司开始把Web站点迁移到Node.js服务器。Node.js的优势显而易见,本文不再赘述,那么它是如何做到的呢?内部的逻辑又是什么?带着这些问题,笔者开始了研究Node.js的漫漫长征...

weixin_33779515的博客 96

从零开始Node.js——关于Node.js是什么

Node.js是个房子,知道窗户和门在哪里就够了

分享前端知识,记录前端进阶 670

牛!总结Node.js学习干货

1:

weixin_45178761的博客 220

Node.js的环境安装

最近在尝试用DeepChat中的MCP功能连接数据库,看看大模型能提供给我们关于数据库的什么新奇见解,使用支持MySQL数据库的MCP前提是需要本机安装Node.js,于是看了廖雪峰老师的博文,这就是Windows中普通的安装文件,下载完成,双击打开,"下一步"操作N次,注意此处全选,尤其是"Add to Path",会自动将环境变量信息加到PATH中,输入node,就会进入到Node.js的交互环境,可以输入任意的JavaScript语句,执行得到反馈,例如此处的1+1=2的运算操作,

bisal的专栏 1325
上一篇: 干货 | 携程容器偶发性超时问题案例分析(二)
下一篇: 干货 | 行为驱动开发在携程机票前端研发流程中的实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值