NodeJS入门学习笔记

文章目录

REST API概念

REST 通过HTTP协议实现前后端数据交换的API

REST是一种软件架构模式,这种方法定义了开发软件的方式

  • 资源

    实体(文本、图片、歌曲、服务等等)URL

  • 表现层

    客户端和服务端之间传递资源的表现形式(text, HTML, XML, JSON等)

  • 状态转化

    客户端通过四种动作(GET, PUT, POST, DELETE)对服务资源操作,实现表现层状态转化

REST架构

每一个URL代表一种资源

客户端和服务端之间,传递这种资源的某种表现层

客户端通过四个HTTP动词,对服务端资源进行操作,实现"表现层状态转化"

eg.https://jsonplaceholder.typicode.com/posts/

优点:

  • API复用率高
  • 总是可用,只要有网络,可以发起HTTP请求,数据交流就不会间断

NodeJS搭建服务器

Node其实是JS的服务器的运行环境,NodeJS让JS可以作为后端语言

提供了

  • JS虚拟机
  • 工具库

使得JS可以和操作系统互动(比如读写文件、新建子进程)

实现

Google V8 引擎 语言解释器 + libuv库进行系统资源调度

NPM

Node默认的包管理器,帮助下载别人写好的轮子

常见npm命令

  • npm -v

  • npm install moduleName

  • npm install moduleName -g 可以直接在命令行使用

  • npm list -g查看所有全局安装的模块

  • npm list vue 查看某个模块的版本号

  • npm -g install npm@版本号 更新npm版本

  • npm install -save moduleName 安装 写入dependencies 运行时的依赖

  • npm install -save-dev moduleName安装 写入devDependencies 开发时的依赖

    简写

    1. i = install
    2. -S = --save
    3. -D = --save-dev
    4. -g = --global

镜像设置与查看

搭建环境时npm设置成淘宝镜像

设置当前地址(设置为默认地址)

查看镜像的配置结果

  • npm config get registry
  • npm config get disturl

使用nrm工具切换淘宝源

  • npx nrm use taobao

切换回官方源

  • npx nrm use npm

可以使用淘宝定制的cnpm(gzip压缩支持)命令行工具代替默认的npm

npm install -g cnpm --registry=https://registry.npm.taobao.org

例如:cnpm i xxxx -S

全局对象和全局变量

Node提供了以下几个全局对象,是所有模块都可以调用的

  • global:表示Node所在的全局对象,类似浏览器的Window对象。注意,在模块文件中声明的全局变量不是全局对象的属性,因为这是该模块私有的
  • process:该对象表示Node所处的当前进程,允许开发者与该进程互动
  • console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能
  • _dirname:当前模块的目录路径
  • _filename:当前模块的文件名

全局函数

  • setTimeout():用于在指定毫秒之后,运行回调函数,该方法返回一个整数,代表这个新建定时器的编号
  • clearTimeout():用于终止一个setTimeout方法新建的定时器
  • setInterval():用于每隔一定毫秒调用回调函数,该方法返回一个整数,代表这个新建定时器的编号
  • clearInterval():终止一个用setInterval方法新建的定时器
  • require():用于加载模块
  • Buffer():用于操作二进制数据

模块

指别人写好的库

实例:

javascript 复制代码
//hello.js
var http = require('http');

//create a server object
http.createServer(function (req, res) {
  res.write('hello world!');//write a response to the client
  res.end();//end the response
}).listen(8080);//the server object listens on port 8080

console.log('The server is running...')
  1. 首先通过require('http')引入NodeJS内置的http模块,以便使用它提供的函数和对象
  2. 使用 http.createServer()函数创建一个服务器对象,这个函数接受一个回调函数作为参数,用于处理客户端请求并生成响应
  3. 在回调函数中,使用res.write()方法向客户端发送响应内容(字符串'hello world!')
  4. 调用 res.end()方法结束响应,表示已经完成对客户端的响应(必须)
  5. .listen(8080)服务器开始监听指定端口,也就是会在8080端口接收来自客户端的请求

node hello.js 启动该脚本,服务器将会在本地8080端口上运行,每当客户端发送请求时,都会像客户端发送'hello world!'作为响应

模块化结构

  • 支持ES6模块化,但大部分包用的CommonJS规范

  • 模块和文件一一对应,加载一个模块就是加载对应的一个模块文件

  • require命令用于指定加载模块,加载时可以省略脚本文件的后缀名(只限于Node,浏览器不能解析该代码)

    javascript 复制代码
    //自定义模块
    //导出file.js
    //commonJS规范
    module.export{
        
    }
    //es6模块化方法
    export{
    
    }
    
    //导入
    let something = require('./file.js')
    
    //es6方法
    import {......} from "./file.js"
  • 模块一旦被加载以后,就会被系统缓存,如果第二次还加载该模块,则会返回缓存中的版本,模块实际只执行一次。如果希望模块执行多次,可以让模块返回一个函数,然后多次调用该函数

核心模块

  • http:提供HTTP服务器功能
  • url:解析URL
  • fs:与文件系统交互
  • querystring:解析URL的查询字符串
  • child_process:新建子进程
  • util:提供一系列实用小工具
  • path:处理文件路径
  • crypto:提供加密和解密功能,基本是对OpenSSL的包装

异步操作

Node采用V8引擎处理JS脚本,最大特点单线程 ,一次只能运行一个任务,导致Node大量采用异步操作,任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行。由于这种特性,往往采用回调函数(call back)的形式进行定义,回调函数作为异步操作的第二个参数

Express Library

使用现成的包实现REST API

npm install express

设计一个API,前端可以获取后端的JSON文件

javascript 复制代码
var express = require('express');
var app = express();

app.get('/json_data', function (req, res) {
  const data = require('./data.json');
  res.json(data);
})

const port = 8080;
app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})
相关推荐
HC1825808583211 分钟前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write15 分钟前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念21 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
无敌最俊朗@2 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
ZJ_.2 小时前
Electron 沙盒模式与预加载脚本:保障桌面应用安全的关键机制
开发语言·前端·javascript·vue.js·安全·electron·node.js
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
L_cl3 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain3 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
青椒大仙KI113 小时前
24/11/13 算法笔记<强化学习> DQN算法
笔记·算法
提笔惊蚂蚁3 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析