文章目录
-
- [REST API概念](#REST API概念)
- NodeJS搭建服务器
- [Express Library](#Express Library)
REST API概念
REST 通过HTTP协议实现前后端数据交换的API
REST是一种软件架构模式,这种方法定义了开发软件的方式
-
资源
实体(文本、图片、歌曲、服务等等)URL
-
表现层
客户端和服务端之间传递资源的表现形式(text, HTML, XML, JSON等)
-
状态转化
客户端通过四种动作(GET, PUT, POST, DELETE)对服务资源操作,实现表现层状态转化
REST架构
每一个URL代表一种资源
客户端和服务端之间,传递这种资源的某种表现层
客户端通过四个HTTP动词,对服务端资源进行操作,实现"表现层状态转化"
优点:
- 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 开发时的依赖
简写
- i = install
- -S = --save
- -D = --save-dev
- -g = --global
镜像设置与查看
搭建环境时npm设置成淘宝镜像
- npm config set registry https://registry.npm.taobao.org --global
- npm config set disturl https://npm.taobao.org/dist --global
设置当前地址(设置为默认地址)
- npm config set registry https://registry.npmjs.org/
查看镜像的配置结果
- 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...')
- 首先通过
require('http')
引入NodeJS内置的http模块,以便使用它提供的函数和对象 - 使用
http.createServer()
函数创建一个服务器对象,这个函数接受一个回调函数作为参数,用于处理客户端请求并生成响应 - 在回调函数中,使用res.write()方法向客户端发送响应内容(字符串'hello world!')
- 调用
res.end()
方法结束响应,表示已经完成对客户端的响应(必须) .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}`)
})