nodejs基础

在这里插入图片描述

什么是nodejs

在这里插入图片描述

  1. node.js是一个基于Chorme V8引擎的javaScript运行环境

  2. 如何再node中执行js代码
    1)打开终端
    2)node + js文件名称 回车

node内置api——fs

1)读取文件 fs.readFile()

在js代码中使用fs,需要将其导入:const fs = require(‘fs’)

const fs = require('fs');
// fs.readFile(path, [options], callback); path必选参数,options编码格式
// callback回调函数
fs.readFile('hello word.md' ,'utf8', function (err, data) {
    // 判断文件是否读取成果
    if (err) {
       return console.log('读取失败');

    }
    console.log(data);
})
  1. 写如内容 fs.writeFile()
// fs.writeFile(file, data[option], callback)
// file: 路径
// data:数据【option】编码格式
// callback:回调
fs.writeFile('hello word.md', '你好集美', 'utf8', (err) => {
    console.log(err);  //文件写如成果,err的值为null
    if (err) {
        console.log('失败了');
    } 
     console.log('成功了');
})

node内置api ——path

注意:先导入path模块

const path = require('path')
1) path.join() 实现路径片段的拼接
const path = require('path');
// 1 path.join([...paths])  返回值为拼接好的字符串
const pathstr = path.join('/a', '/b/c', '../', './d');
console.log(pathstr);//\a\b\d  注意../具有消除前面的路径的作用

2)path.basename() 从路径字符串中,将文件域名拿出来

//path.basename(path[,ext])
//path:路径
//ext:扩展名
// 
const ym = path.basename('http://baidu.com');
console.log(ym); //baidu.com
const ym2 = path.basename('http://baidu.com','.com');
console.log(ym2); //baidu 去除掉扩展名

内置api——http

1)概念:http模块是node官方提供,专门用来创建web服务器的模块。通过http提供的http.createServer()方法,就能将一台普通的电脑,变成一台web服务器,从而对外提供web资源。
2)先导入:const http = require(‘http’)
3)功能:服务器与普通电脑的区别在于,服务器上安装了web服务器软件,如IIS、Apache
在nodejs中不需要安装第三方的web服务器软件,基于http模块,就可以写一个服务器软件,对外提供web服务。
4)IP地址:每台计算机的唯一地址,通过ip地址实现电脑间的通信,每台服务器也有自己的ip地址。在开发其简,自己的电脑即使服务器也是客户端,为了方便测试,在浏览器中输入127.0.0.1,就可以把自己的电脑当作服务器访问。
5)域名和域名服务器
在这里插入图片描述

DNS将域名转换成IP进行访问
6) 端口号
在这里插入图片描述

7) 创建基本的web服务器
A)导入http模块
B)创建web服务实例
C)为服务器绑定request事件,监听客户端请求
D)启动服务器

//1.导入http模块
const http = require('http');
//2.创建web服务实例
const server = http.createServer()
// 3.服务器绑定request事件,监听客户端请求
// 使用.on()方法,绑定request事件
server.on('request', (req, res) => {
    console.log('someone visit our server');
})
// 4启动服务器
// server.listen(端口号,cb回调,)
server.listen(80, () => {
    console.log('http server running at http://127.0.0.1');
})

分析:
req:请求对象,只要服务器接收到客户端的请求,就会调用server.on()为服务器绑定request处理函数。如果访问到与客户端相关的数据和属性,就可以用req.url:获得url地址,req.method:获取请求类型
res:响应对象,可以获得访问的服务器的相关数据和属性,并且res.end()向客户端发送内容,结束此次请求
8)根据不同的url,响应不同的html内容

模块化

  1. 概念
    解决一个复杂问题是,自上向下逐层将系统划分为若干个模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。
  2. 编程里面的模块化
    遵循固定的规则,八大文件拆分成独立并相互依赖的多个小模块。
  3. 代码拆分的好处
    1)提高代码的复用性
    2)提高代码的可维护性
    3)可实现按需加载
  4. 模块化规范
    模块化所要遵循的规范,如使用什么样的语法格式引用
  5. nodejs的模块分类
    内置模块,nodejs官方提供的,如js path、http
    自定义模块 用户创建的每个js都是自定义模块
    第三方模块,由第三方提供的,非广发提供的内置模块,需要先下载后使用
    5.1 模块加载
    内置模块——使用require(模块名)
    自定义模块——require(js文件路径)
    第三方模块——require(模块名)
    5.2 模块作用域
    与函数作用域相同,在自定义模块中定义的遍历、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域
    好处:防止全局变量污染
    5.2.1 向外共享作用域的成员
    1) module对象:每个自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息。
    在这里插入图片描述

5.2.2 module.exports 默认等于空对象{}
通过module.exports 就可向外共享数据。
外界通过require()方法导入自定义模块时,得到的就是module.exports所指的对象。
5.2.3 export对象
为了简化对外共享成员的代码,Node提供了exports对象,默认情况下,exports和module.exports指向同一个对象,共享结果。
5.2.4 两个命令export/import的使用
(1) export用于规定模块的对外接口
(2)import命令用于输入其他模块的内容
在这里插入图片描述

js文件中的暴露
分别暴露 ——上图
统一暴露 ——下图
默认暴露——下下图
在这里插入图片描述
在这里插入图片描述

  1. 引入方式
    1) 通用导入方式
    三种暴露方式均可使用
import * as m1(自己起的名称) from './js/m1.js';

2)解构赋值的方式
三种暴露方式均可使用

//m1文件为分别暴露
import {school,teach} form './js/m1.js'
//m2文件为统一暴露
import {school as sc,findJob} form './js/m2.js'   //使用别名避免重名
//m3文件为默认暴露
import {default as d} form './js/m3.js'   //默认暴露必须起别名 

3)简单引入
只适用于默认暴露

import m3 form './js/m3.js'  

express

  1. 概念:基于nodejs的快速、开放、极简的web开发框架
  2. 作用:和内置http模块类似,专门用来创建web服务器的
  3. 本质: npm上的第三方报,提供快速创建web服务器的方法
  4. express功能:对于前端,最常见的两种服务器web服务器:专门对外提供web网页资源的服务器;API接口服务器:专门对外提供API接口的服务器;对于express,这两种服务器均可创建
    5 express的使用
    5.1 安装——npm -i express @4.17.1
    5.2 创建web服务器
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

笔记跟随

https://www.bilibili.com/video/BV1a34y167AZ?p=39

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 可以在一台服务器上处理数千个并发连接,而无需引入管理线程并发的负担(这可能是重大 bug 的来源)。   Node.js 具有独特的优势,因为为浏览器编写 JavaScript 的数百万前端开发者现在除了客户端代码之外还可以编写服务器端代码,而无需学习完全不同的语言。   在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为不必等待所有用户更新其浏览器,你可以通过更改 Node.js 版本来决定要使用的 ECMAScript 版本,并且还可以通过运行带有标志的 Node.js 来启用特定的实验中的特性。   大量的库 npm 的简单结构有助于 Node.js 生态系统的激增,现在 npm 仓库托管了超过 1,000,000 个可以自由使用的开源库包。   Node.js 应用程序的示例 Node.js zui常见的 Hello World 示例是 Web 服务器:   const http = require('http')const hostname = '127.0.0.1'const port = 3000const server = http.createServer((req, res) => )server.listen(port, hostname, () => ) 此代码首先引入了 Node.js http 模块。   Node.js 具有出色的标准库,包括对网络的一.流支持。   http 的 createServer() 方法会创建新的 HTTP 服务器并返回它。   服务器被设置为监听指定的端口和主机名。 当服务器就绪后,回调函数会被调用,在此示例中会通知我们服务器正在运行。   每当接收到新的请求时,request 事件会被调用,并提供两个对象:一个请求(http.IncomingMessage 对象)和一个响应(http.ServerResponse 对象)。   这两个对象对于处理 HTTP 调用至关重要。   第一个对象提供了请求的详细信息。 在这个简单的示例中没有使用它,但是你可以访问请求头和请求数据。   第二个对象用于返回数据给调用方。   在此示例中:   res.statusCode = 200 设置 statusCode 属性为 200,以表明响应成功。   设置 Content-Type 响应头:   res.setHeader('Content-Type', 'text/plain') 关闭响应,添加内容作为 end() 的参数:   res.end('你好世界n') Node.js 框架和工具 Node.js 是一个底层的平台。 为了使开发者做事变得容易又来劲,社区在 Node.js 上构建了数千个库。   久而久之,其中许多已成为受欢迎的选择。 以下是一些值得学习的清单:   AdonisJs: 一个全栈框架,高度专注于开发者的效率、稳定和信任。 Adonis 是zui快的 Node.js Web 框架之一。   Express: 提供了创建 Web 服务器的zui简单但功能zui强大的方法之一。 它的极简主义方法,专注于服务器的核心功能,是其成功的关键。   Fastify: 一个 Web 框架,高度专注于提供zui佳的开发者体验(以zui少的开销和强大的插件架构)。 Fastify 是zui快的 Node.js Web 框架之一。   Gatsby: 一个基于 React、由 GraphQL 驱动的静态网站生成器,具有非常丰富的插件和启动器生态系统。   hapi: 一个富框架,用于构建应用程序和服务,使开发者可以专注于编写可重用的应用程序逻辑,而不必花费时间来搭建基础架构。   koa: 由 Express 背后的同一个团队构建,旨在变得更简单更轻巧。 新项目的诞生是为了满足创建不兼容的更改而又不破坏现有社区。   Loopback.io: 使构建需要复杂集成的现代应用程序变得容易。   Meteor: 一个强大的全栈框架,以同构的方式使用 JavaScript 构建应用(在客户端和服务器上共享代码)。 曾经是提供所有功能的现成工具,现在可以与前端库 React,Vue 和 Angular 集成。 也可以用于创建移动应用。   Micro: 提供了一个非常轻量级的服务器,用于创建异步的 HTTP 微服务。   NestJS: 一个基于 TypeScript 的渐进式 Node.js 框架,用于构建企业级的高效、可靠和可扩展的服务器端应用程序。   Next.js: 一个 React 框架,可为你提供生产所需的所有功能的zui佳开发者体验:混合静态和服务器渲染、TypeScript 支持、智能捆绑、路由预取等。   Nx: 使用 NestJS、Express、React、Angular 等进行全栈开发的工具包! Nx 有助于将开发工作从一个团队(构建一个应用程序)扩展到多个团队(在多个应用程序上进行协作)!   Sapper: Sapper 是一个用于构建各种规模的 Web 应用程序的框架,具有出色的开发体验和灵活的基于文件系统的路由。还提供 S.S.R等!   Socket.io: 一个实时通信引擎,用于构建网络应用程序。   Strapi: Strapi 是一个灵活的开源 Headless CMS,可使开发者可以自由选择自己喜欢的工具和框架,同时还允许编辑人员轻松地管理和分发其内容。 通过使管理面板和 API 可以通过插件系统进行扩展,Strapi 使全球zui大的公司能够加速内容交付,同时构建优美的数字体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值