Node.js 入门教程 1 Node.js 简介

news2025/1/31 2:58:24

Node.js 入门教程

Node.js官方入门教程

Node.js中文网

本文仅用于学习记录,不存在任何商业用途,如侵删

文章目录

      • Node.js 入门教程
      • 1 Node.js 简介
        • 1.1 大量的库
        • 1.2 Node.js 应用程序的示例
        • 1.3 Node.js框架和工具

1 Node.js 简介

Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!

Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使得 Node.js 的性能非常好。

Node.js 应用程序在单个进程中运行,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原语,以防止 JavaScript 代码阻塞,通常,Node.js 中的库是使用非阻塞范式编写的,使得阻塞行为成为异常而不是常态。

当 Node.js 执行 I/O 操作时(比如从网络读取、访问数据库或文件系统),Node.js 将在响应返回时恢复操作(而不是阻塞线程和浪费 CPU 周期等待)。

这允许 Node.js 使用单个服务器处理数千个并发连接,而不会引入管理线程并发(这可能是错误的重要来源)的负担。

Node.js 具有独特的优势,因为数百万为浏览器编写 JavaScript 的前端开发者现在无需学习完全不同的语言,就可以编写除客户端代码之外的服务器端代码。

在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为你不必等待所有用户更新他们的浏览器,你负责通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,你还可以通过运行带有标志的 Node.js 来启用特定的实验性功能。

1.1 大量的库

npm 以其简单的结构帮助 Node.js 生态系统蓬勃发展,现在 npm 仓库托管了超过 1,000,000 个开源包,你可以自由使用。

1.2 Node.js 应用程序的示例

Node.js 中最常见的 Hello World 示例是 Web 服务器:

const http = require('http')


const hostname = '127.0.0.1'
const port = 3000


const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World\n')
})


server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

要运行此代码片段,则将其另存为 server.js 文件并在终端中运行 node server.js

在这里插入图片描述

访问地址

在这里插入图片描述

此代码首先引入 Node.js http 模块。

Node.js 有一个很棒的标准库,包括一流的网络支持。

httpcreateServer() 方法创建新的 HTTP 服务器并返回。

服务器设置为监听指定的端口和主机名。 当服务器准备好时,则回调函数被调用,在此示例中会通知我们服务器正在运行。

每当接收到新请求时,都会调用 request 事件,其提供两个对象:请求(http.IncomingMessage 对象)和响应(http.ServerResponse 对象)。

这两个对象对于处理 HTTP 调用是必不可少的。

第一个提供请求的详细信息。 在这个简单的示例中,它没有被使用,但是你可以访问请求头和请求数据。

第二个用于向调用者返回数据。

在此示例中:

res.statusCode = 200

将 statusCode 属性设置为 200,以指示成功响应。

设置 Content-Type 标头:

res.setHeader('Content-Type', 'text/plain')

然后我们关闭响应,将内容作为参数添加到 end()

res.end('Hello World\n')

在这里插入图片描述

1.3 Node.js框架和工具

Node.js 是一个底层平台。 为了让开发者的工作变得轻松有趣,社区在 Node.js 上构建了数千个库。

许多随着时间的推移而成为流行的选择。 以下是值得学习的部分列表:

  • AdonisJS:基于 TypeScript 的全功能框架,高度关注开发者的效率、稳定和信任。Adonis 是最快的 Node.js Web 框架之一。
  • Egg.js:使用 Node.js 和 Koa 构建更好的企业级框架和应用程序的框架。
  • Express:提供了最简单而强大的方式来创建 Web 服务器。它的极简主义方法、没有偏见、专注于服务器的核心功能,是其成功的关键。
  • Fastify:高度专注于以最少的开销和强大的插件架构提供最佳开发者体验的 Web 框架。Fastify 是最快的 Node.js Web 之一 构架。
  • FeatherJS:Feathers 是轻量级的网络框架,用于使用 JavaScript 或 TypeScript 创建实时应用程序和 REST API。在几分钟内构建原型,在几天内构建可用于生产的应用程序。
  • Gatsby:基于 React、由 GraphQL 驱动的静态网站生成器,具有非常丰富的插件和启动器生态系统。
  • hapi:用于构建应用程序和服务的富框架,使开发者能够专注于编写可重用的应用程序逻辑,而不是花时间搭建基础设施。
  • koa:由 Express 背后的同一个团队构建,旨在更简单、更小,建立在多年知识的基础上。新项目的诞生是为了在不破坏现有社区的情况下创建不兼容的更改。
  • Loopback.io:使构建需要复杂集成的现代应用程序变得容易。
  • Meteor:非常强大的全栈框架,为您提供同构的方法来使用 JavaScript 构建应用程序,在客户端和服务器上共享代码。曾经是提供所有功能的现成工具,现在可以与前端库 React、Vue 和 Angular 集成。也可用于创建移动应用程序。
  • Micro:提供了非常轻量级的服务器来创建异步的 HTTP 微服务。
  • NestJS:基于 TypeScript 的渐进式 Node.js 框架,用于构建企业级的高效、可靠和可扩展的服务器端应用程序。
  • Next.js:React 框架,为您提供最佳的开发者体验,包括生产所需的所有功能:混合静态和服务器渲染、TypeScript 支持、智能捆绑、路由预取等。
  • Nx:使用 NestJS、Express、React、Angular 等进行全栈大仓开发的工具包!Nx 有助于将您的开发从构建单个应用程序的团队扩展到多个团队协作开发多个应用程序!
  • Remix:Remix 是一个全栈 Web 框架,用于为 web 构建出色的用户体验。它开箱即用,提供构建现代 web 应用程序所需的一切(包括前端和后端)并将其部署到任何基于 JavaScript 的运行时环境(包括 Node.js)。
  • Sapper:Sapper 是用于构建各种规模的 Web 应用程序的框架,具有优美的开发体验和灵活的基于文件系统的路由。提供 SSR 等等!
  • Socket.io: 构建网络应用的实时通信引擎。
  • Strapi:Strapi 是灵活开源的 Headless CMS,让开发者可以自由选择他们喜欢的工具和框架,同时还允许编辑人员轻松管理和分发他们的内容。通过插件系统使管理面板和 API 可扩展,Strapi 使世界上最大的公司能够在构建精美的数字体验的同时加速内容交付。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

子矩形计数(冬季每日一题 17)

给定一个长度为 nnn 的数组 aaa 和一个长度为 mmm 的数组 bbb。 两个数组均只包含 000 和 111。 利用两个给定数组生成一个 nmnmnm 的矩阵 ccc,其中 cijaibjc_{ij}a_ib_jcij​ai​bj​。 显然,矩阵 ccc 中也只包含 000 和 111。 请问,矩阵…

期末复习 c

作者:小萌新 专栏:C语言复习 作者简介: 大二学生 希望能和大家一起进步! 本篇博客简介:回顾之前的分支循环以及一些题目博客 [TOC](这里写目录标题分支循环选择switch casegetchar putchar 以及EOF三个C语言练习题总结…

C++智能指针之unique_ptr

C智能指针之unique_ptr前言一、unique_ptr1.1 unique_ptr类的初始化1.2 unique_ptr禁止拷贝和赋值1.3 release、reset函数1.4 向unique_ptr传递删除器1.5 unique_ptr与动态数组的使用总结前言 在C中,动态内存的申请和释放是通过运算符:new 和 delete 进行…

【无线传感器】基于Matlab实现WSN 查找两个节点之间的最短路径并发送数据

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Linux基础内容(13)—— 进程控制

目录 1.fork函数的进程创建 1.fork返回值 2.fork返回值 3.fork调用失败 2.写时拷贝 3.退出码的知识 4.进程退出 1.退出的情况 2.正常退出 5.进程等待 1.调用系统等待函数杀死僵尸进程 2.僵尸状态与PCB的关系 3.进程阻塞等待与非阻塞等待方式 6.进程程序替换 1.替…

【网络篇】第十八篇——IP协议相关技术

目录 DNS DNS背景 域名的层级关系 域名解析过程 使用dig工具分析DNS过程 ARP DHCP NAT NAT IP转换过程 NAPT NAT技术的缺陷 如何解决NAT潜在问题 ICMP ICMP功能 ICMP协议格式 ping命令 traceroute命令 IGMP 跟IP 协议相关的技术也不少,接下来说说与IP 协议相关的重…

Docker——Prometheus监控服务治理

摘要 Prometheus是继Kubernetes之后,第二个从云原生计算基金会(CNCF)毕业的项目。Prometheus是Google监控系统BorgMon类似实现的开源版,整套系统由监控服务、告警服务、时序数据库等几个部分,及周边生态的各种指标收集…

uniapp vuex正确的打开方式

uniapp vuex正确的打开方式一、vuex与全局变量globalData的区别二、uniapp vuex使用目录结构如下1. 根目录创建vuex目录,创建index.js文件2. 模块化代码3. 在 main.js 中导入store文件4. 调用一、vuex与全局变量globalData的区别 uni-app像小程序一样有globalData&…

项目开发——【流程图】软件工程程序流程图详解《如何正确绘制项目开发流程图》

程序流程图详解 介绍:通过图形符号形象的表示解决问题的步骤和程序。好的流程图,不仅能对我们的程序设计起到作用;在帮助理解时,往往能起到"一张图胜过千言万语"的效果。 一、程序流程图基本控制结构 顺序型&#xf…

如何实现RTS游戏中鼠标在屏幕边缘时移动视角

文章目录🧨 Preface🎏 判断鼠标是否处于屏幕边缘⚽ 获取鼠标处于屏幕边缘时的移动方向🎨 控制相机在x、z轴形成的平面上移动🏓 完整示例代码🧨 Preface 本文简单介绍如何在Unity中实现即时战略游戏中鼠标在屏幕边缘的…

创新赋能合作伙伴,亚马逊云科技re:Invent科技盛宴

北京时间11月29号,亚马逊云科技年度峰会re:Invent 2022将在拉斯维加斯开幕。这场年度最重磅的云计算技术大会不仅是科技盛宴,也是亚马逊云科技与诸多客户交流互鉴的绝佳平台,今天带大家认识一下几位资深云计算用户,以及他们和re:I…

MyBatis ---- 搭建MyBatis

MyBatis ---- 搭建MyBatis1. 开发环境2. 创建maven工程a>打包方式:jarb>引入依赖3. 创建MyBatis的核心配置文件4. 创建mapper接口5. 创建MyBatis的映射文件6. 通过junit测试功能7. 加入log4j日志功能a>加入依赖b>加入log4j的配置文件1. 开发环境 IDE&a…

Linus 文件处理(四)

目录 一、前言 二、高级主题: fcntl和mmap 1、fcntl 2、mmap 3、Using mmap 一、前言 本文将简单介绍Linux文件和目录,以及如何操作它们(如何创建文件、打开、读、写和关闭,程序如何操作目录,如创建、扫描和删除目录等&…

池风水利用工具

引用 这篇文章的目的是介绍一种基于内核态内存的越界写入通用利用技术和相关工具复现. 文章目录引用简介分析调试分析漏洞利用工具使用方法工具使用效果相关引用参与贡献简介 笔者的在原作者池风水利用工具(以下简称工具)基础上进行二次开发,新增了全自动获取内核调试模块符号…

QT-QTableWidget中的cell和item的区别

文章目录QTableWidget中单击一个单元格响应不同的函数:cell和item的区别:单击单元格响应自定义函数我的错误思路:已剪辑自: https://blog.csdn.net/CCLasdfg/article/details/114691478 QTableWidget中单击一个单元格响应不同的函数&#xf…

【服务器搭建】教程三:怎样购买域名并怎样进行域名解析 来啦

前言 购买一台服务器,再来个域名,搭建一个自己的个人博客网站,把一些教程、源码、想要分享的好玩的放到网站上,供小伙伴学习玩耍使用。我把这个过程记录下来,想要尝试的小伙伴,可以按照步骤,自己…

多云加速云原生数仓生态,华为与 HashData 联合打造方案

多云的兴起,源于用户应用对于基础设施、云服务功能、安全性等的差异化需求,用户希望根据需求将应用、数据因“云”制宜,实现业务的高度灵活性和高效性。这也直接驱动着云原生数据仓库等一批云原生应用的流行,以及存储等基础设施加…

为什么用公钥加密却不能用公钥解密?

一直以来我都在逃避写HTTPS。 毕竟。 HTTPS里名词太多。概念又巨繁琐。 实在是太难解释了,能不写我尽量不写。。。。 但为了让图解网络的知识体系尽量完整些。 今天,大家忍一忍。 我们就从对称加密和非对称加密聊起吧。 对称加密和非对称加密 小学…

Python学习笔记-语言基础

1.基础语法特点 1.1 注释 注释,是用于在代码中添加的标注性的文字,程序中并不会执行,知识用于告知程序员,该代码是干什么的,怎么用的等。 注释主要用于防止别人阅读代码是可以识别到代码的意图或者一段时间之后我们…

教程五 在Go中使用Energy创建跨平台GUI - 执行开发者工具方法

教程-示例-文档 介绍 本文介绍在Energy中如何执行开发者工具方法 开发者工具方法,可以设置浏览器头,模拟仿真设备等. 使用方式 字典对象创建 cef.NewCefDictionaryValue() 字典对象是keyvalue方式, chromium定义的字典名称和对应的值,通…