npm指令下载第三方模块
想要使用node.js写后端引入第三方模块是必需的,而下载第三方模块的方法便是 npm 指令;npm 是下载了node后自带的
- npm 指令:
- 测试指令: npm -v (终端的地址无所谓)
- 初始化本地仓库 记录器:(此时一定要将终端的路径设置为我们项目的根目录)
- npm init——————创建一个本地仓库记录器, 并且我们可以设置记录器内的内容
- npm init——————创建一个本地仓库记录器, 内部的内容全部按照默认值处理
- 利用npm安装一个第三方包:
- npm install 第三方包名
- npm i 第三方包名
- 安装成功后 项目中的 package.json 会多一个 dependencies——内部记录我们刚才安装的第三方包
- 并且 在项目中还会多一个文件 package-lock.json,这个文件内部会记录我们的 第三方包的详细版本
- 最重要的是我们的项目中会多一个 文件夹 node_modules,内部存放我们刚才安装的 第三方包
- npm 查询能够安装的版本
- npm view 第三方包名 versions
- npm 安装指定版本
- npm i 包名@x.y.z
下载完第三方包之后就可以引入使用
const express= require('express')
实用的第三方包
- express
- 引入后使用express创建服务器
const server = express();
- 代码书写在创建服务器和配置端口号之间
// 引入第三方模块
const express= require('express')
// 1. 创建一个服务器
const server = express();
// 1.1 引入静态资源
server.use("/static", express.static("./client"));
// 1.2 配置接口处理
// 商品相关
server.get("/api/goods/list", goodsList);
server.post("/api/goods/info", goodsInfo);
// 购物车相关
server.get("/api/cart/list", cartList);
server.get("/api/cart/addItem", cartAddItem);
server.get("/api/cart/delItem", cartDelItem);
// 用户相关
server.post("/api/user/login", userLogin);
server.get("/api/user/info", userInfo);
// 2. 给服务器添加一个端口号
server.listen(8080, () => console.log("服务器启动成功"));
- body-parser
- 作用:解析请求参数;帮我们解析 post 的参数
- express 依赖了这个第三方包, 所以你安装 express 的时候会自动安装这个第三方包
const bodyParser = require('body-parser')
server.use(bodyParser.urlencoded({ extended: false }))
server.use(bodyParser.json())
- cors
- 作用:解决跨域的方法之一
- 后端反馈前端请求的时候提示浏览器此次请求是合法的,不进行拦截
const cors = require('cors')
server.use(cors())
- axios
- 作用:发送ajax请求
- node.js中无法发送ajax请求,所以需要借助axios
- axios的参数是个对象,传入请求方式和地址等内容
- 可以使用async 和 await
const axios = require("axios");
axios({
method: "GET",
url: "http://localhost:8081/api/a",
}).then(({ data }) => {
res.send(data);
});
路由表
- 创建路由
- 语法:
const Router = express.Router()
- 可以向路由上挂载一些接口
Router.get/post('/XXX', () => {})
- 可以向路由总表上挂载路由分表
Router.use('/XXX', 路由分表)
- 使用路由
- 将路由总表挂载到服务器上
server.use('/XXX', 路由总表)
- 语法:
中间件
-
全局中间件
- 服务器.use(参数1, 参数2)
- 参数1: 是表示以什么路径开头
- 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
- 参数1可以不传
- 服务器.use(参数1, 参数2)
-
路由中间件
- 路由表.use(参数1, 参数2)
- 参数1: 是表示以什么路径开头
- 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
- 参数1可以不传
- 路由表.use(参数1, 参数2)
-
请求中间件
- 在 请求的处理函数前, 在书写一个 函数
-
全局错误处理中间件
- 全局错误处理中间件有一个固定的位置, 一定是在服务器文件的最后
- 服务器.use(参数1, 参数2)
- 参数1: 是表示以什么路径开头
- 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
- 参数1可以不传
跨域
什么是跨域:请求所在的服务器, 与要被请求的服务器:两个服务器地址、协议: http/https、域名: localhost/www.baidu.com/www.juejin.… 、端口号: 0~65535。上述的三个, 有一个不同, 就会触发跨域, 上边的就是我们浏览器的同源策略,只要违反了同源策略一定会触发跨域
- 跨域的结果
- 请求能够正常的发送成功
- 服务器也一定能够正常的响应成功
- 但是浏览器会认为 当前的请求不安全, 然后将本次请求的信息拦截掉
- 所以最终的结果是
- 前端能够正常的发出去请求
- 服务端能够正常的响应回数据
- 但是前端不能正常的接收到数据, 因为被浏览器拦截了
如何解决跨域
暂时先不写