NodeJS 简介[简单讲解]

什么是 NodeJS?

  • 一个开源和跨平台的 Javascript 运行环境。
  • 在 Javascript V8 引擎(Google Chrome 的核心)上运行
  • 单线程并使用异步编程。
  • 如果 NodeJS 是单线程的,它如何处理多个请求?

    想象一下,你去一家只有一名厨师的餐厅。你从服务员那里点了意大利面。服务员将订单和其他顾客的订单告知厨师。厨师收到了你的意大利面订单,但意识到煮意大利面需要时间。他没有等待你的意大利面煮熟,而是把它放在炉子里煮,同时开始处理其他订单/

    NodeJS 的工作原理类似。

    **Chef** = Node.js 的主线程(Node.js 在主线程上一次只能做一件事)

    **Waiter** = 事件循环(事件循环接收传入的请求并决定如何处理它们)

    **厨房帮手** = 工作线程或 OS 后台进程(Node.js 将工作委托给帮手)

    例如,在 I/O 操作中,当请求 Web 服务器从文件中提取内容时,NodeJS 只是将工作委托给操作系统的文件系统,并准备处理后续请求。当文件系统响应时,它会处理该请求。

    为什么我应该选择 NodeJS 而不是其他后端应用程序?

  • 整个堆栈使用相同的语言:大多数前端开发使用 JS 框架,如 Angular、React、Vue 等。如果后端应用程序用 Javascript 编写,那将是一个巨大的优势。全栈开发人员不需要学习新的语言来进行后端开发。
  • 非常适合基于微服务的架构:NodeJS 的单线程事件循环架构对于 Web 开发人员来说比多线程架构方便得多,因为在处理多个并发请求时不存在可用线程被完成的风险。
  • 开发速度快:NodeJS 非常轻量,几乎不需要费力就能快速启动并运行 NodeJS 服务器。
  • NPM:NodeJS 包管理器是全球开发人员编写的庞大代码库。它可以轻松用作项目中的依赖项,从而缩短编写额外代码的时间。
  • “几乎不用费什么力气,NodeJS 服务器就能快速启动并运行”——就这么简单吗?

    是的。

    const { createServer } = require('node:http');
    
    const hostname = '127.0.0.1';
    const port = 3000;
    
    const server = 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}/`);
    });

    此代码的作用:

  • 使用 NodeJS 的 http 模块。
  • 配置主机和端口。
  • 使用http模块的createServer方法创建服务器。
  • 每当收到新的请求时,就会调用请求事件,提供两个对象:http.IncomingMessage 对象和 http.ServerResponse 对象。
  • 创建的服务器监听主机和端口。
  • 就是这样。现在,运行 `node server.js`(其中 `server.js` 是代码文件的名称)将使您的 NodeJS 服务器“启动并运行”。