学习Node.js,从这里开始

哈沛
2023-12-01
一、Node.js 是什么?

Node.js 就是一个封装了 操作系统API 的可执行程序,同时也对外提供了自己的API,并采用了 JavaScript 作为其API 的标准。换言之,应用软件可以用 JavaScript 直接与操作系统进行交互通讯。


1、独特优势:
  • 使用 Google Chrome V8 JavaScript 引擎,使得前端开发人员也可用 JS 写后端代码;
  • 采用单线程、异步 I/O(非阻塞范式)运行,不会有线程并发的负担,使得单台服务器也能轻松处理数千个并发。

2、Node.js 与 Nginx 区别
  • Nginx 只是负责通讯的应用程序,只需简单修改配置文件,就可以搭建一个高性能的 http 服务器;Node.js 的 HTTP 这个 API 也可以搭建一个 http 服务器;

  • Node.js 可以完成 Nginx 的所有工作,但是需要写很多代码,也要做很多性能优化工作,如果只是需要http服务,那么Nginx 是个好的解决方案。譬如 用 Nginx 部署发布一个网站。

  • 如果需要开发一款web应用,Node.js 是一个好的解决方案,因为Node.js 不仅仅只有 HTTP 这一个API,还有 Buffer、processes、Console 等很多API,web 应用所有需要都能得到支持。譬如开发一款企业级网站。


二、安装 Node.js

三、使用 Node.js 开启一个简单Web项目
  1. 用你熟悉的方式创建一个 app.js 文件,复制下面代码到文件中去:

    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');
    });
    
    server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
    });
    
  2. 启动服务器

    # 打开终端,执行下面代码
    cd <上面 app.js 文件目录>
    node app.js
    
  3. 访问服务

    # 用浏览器访问下面链接
    http://localhost:3000
    

四、Node.js 内置标准库

五、代码重用
1、重要概念
  • 模块(module) :把实现某功能的代码,放到单个 .js 文件中,在需要时导入,可避免写重复代码,这个 .js 文件被称为 模块(module)。

  • 包(package) :多个 .js 文件放在一起,就组成了一个 包(package)。

  • npm :把这个包(package)共享到平台上,供他人下载使用,这个平台就是 npm 的一部分,npm 还有下载、安装包等管理包的功能。由于全球1100万开发人员的贡献,现在有超过100万个包可供使用,通过 npm 安装包到项目中,极大缩短项目开发周期。安装和使用,看这里!

  • yarn :在使用 npm 的过程中,发现了一些缺点,yarn 平台的出现就是为了解决这些缺点。安装和使用,看这里!


2、Node.js 的模块

Node.js 出现之前,js 文件只有一个官方标准:ECMAScript,所有浏览器解析 js文件,都是用这个标准解析。

Node.js 有自己的一套 js 标准,称之为 CommonJS,当然 Node.js 也完全兼容 ECMAScript 标准的 js 代码。

那么问题来了,上面示例中的 node app.js ,这个app.js 文件,应该用哪种标准来解析执行呢?详情,看这里!


3、模块的全局变量

Node.js 加载每一个模块时,都会传递几个参数给模块,告之即将要被加载到哪里?详情,看这里!


六、package.json

package.json 可以理解为项目说明文件,文件内就是一个json对象,记录不同属性,供 Node.js 访问,譬如 Node.js 会读取 package.json 文件中type属性,来决定用什么标准来加载执行 js 文件。

npm 发布的包,也会用到 package.json 来表明包的作者、名称等信息。


七、其他框架

Node.js 确实提供了丰富的基础 API,在实际使用过程中还是需要编写很多代码的,于是其常用的功能又被进一步封装,形成很多更便捷的框架。

  • Express :一个简洁而灵活的Web应用框架,可以快速地搭建一个功能完整的网站。更多内容,看这里!

  • koa: 基于 Express,但比 Express 更小、更简单,更易于使用。

  • Egg.js: 基于 koa,提供更便捷的方式来开发企业级web应用。

  • Gatsby :可开发运行速度极快的静态网站。非常适合新闻、电子商务等内容型网站,可将整合不同来源的数据。更多内容,看这里!

  • Strapi: 一款开源的 CMS,无需写代码即可实现数据存储和供第三方访问数据的 API。支持 Markdown 的数据格式。strapi 作为数据源配合Gatsby生成静态网站,是个非常不错的解决方案。

  • AdonisJS: A TypeScript-based fully featured framework highly focused on developer ergonomics, stability, and confidence. Adonis is one of the fastest Node.js web frameworks.

  • Fastify: A web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture. Fastify is one of the fastest Node.js web frameworks.

  • FeatherJS: Feathers is a lightweight web-framework for creating real-time applications and REST APIs using JavaScript or TypeScript. Build prototypes in minutes and production-ready apps in days.

  • hapi: A rich framework for building applications and services that enables developers to focus on writing reusable application logic instead of spending time building infrastructure.

  • Loopback.io: Makes it easy to build modern applications that require complex integrations.

  • Meteor: An incredibly powerful full-stack framework, powering you with an isomorphic approach to building apps with JavaScript, sharing code on the client and the server. Once an off-the-shelf tool that provided everything, now integrates with frontend libs React, Vue, and Angular. Can be used to create mobile apps as well.

  • Micro: It provides a very lightweight server to create asynchronous HTTP microservices.

  • NestJS: A TypeScript based progressive Node.js framework for building enterprise-grade efficient, reliable and scalable server-side applications.

  • Next.js: React framework that gives you the best developer experience with all the features you need for production: hybrid static & server rendering, TypeScript support, smart bundling, route pre-fetching, and more.

  • Nx: A toolkit for full-stack monorepo development using NestJS, Express, React, Angular, and more! Nx helps scale your development from one team building one application to many teams collaborating on multiple applications!

  • Sapper: Sapper is a framework for building web applications of all sizes, with a beautiful development experience and flexible filesystem-based routing. Offers SSR and more!

  • Socket.io: A real-time communication engine to build network applications.


八、参考文档
 类似资料: