node写后端的要点

209 阅读4分钟

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', 路由总表)

中间件

  1. 全局中间件

    • 服务器.use(参数1, 参数2)
      • 参数1: 是表示以什么路径开头
      • 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
    • 参数1可以不传
  2. 路由中间件

    • 路由表.use(参数1, 参数2)
      • 参数1: 是表示以什么路径开头
      • 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
    • 参数1可以不传
  3. 请求中间件

    • 在 请求的处理函数前, 在书写一个 函数
  4. 全局错误处理中间件

    • 全局错误处理中间件有一个固定的位置, 一定是在服务器文件的最后
    • 服务器.use(参数1, 参数2)
      • 参数1: 是表示以什么路径开头
      • 参数2: 如果路径的开头符合 参数1 的要求, 那么执行参数2 的代码
    • 参数1可以不传

跨域

什么是跨域:请求所在的服务器, 与要被请求的服务器:两个服务器地址、协议: http/https、域名: localhost/www.baidu.com/www.juejin.… 、端口号: 0~65535。上述的三个, 有一个不同, 就会触发跨域, 上边的就是我们浏览器的同源策略,只要违反了同源策略一定会触发跨域

  • 跨域的结果
    • 请求能够正常的发送成功
    • 服务器也一定能够正常的响应成功
    • 但是浏览器会认为 当前的请求不安全, 然后将本次请求的信息拦截掉
    • 所以最终的结果是
      • 前端能够正常的发出去请求
      • 服务端能够正常的响应回数据
      • 但是前端不能正常的接收到数据, 因为被浏览器拦截了

如何解决跨域

暂时先不写