使用node搭配express编写接口

node编写接口

  • 接口编写(RESTful Api规范)

    1. 根据不同的请求类型实现不同的接口
      • get 查
      • post 增
      • put 改(覆盖)
      • patch 改(修改部分)
      • delete 删
    2. 根据不同的地址实现不同的接口
  • 获取请求参数

    • url地址:get

      通过req.query获取

        // get /goods?page=1&size=10
    
    • 请求体

      通过req.body获取,前提使用相应中间件格式化参数

    • 动态路由

      通过req.params获取

express相关的方法

  • req.query => 作用:就是拿到get请求的参数
  • res.send(goodlist); => 作用:就是服务器做出响应,这边带有的是服务器做出回应和关闭服务器
  • 请求体

    通过req.body获取,前提使用相应中间件格式化参数
    格式中间件格式化参数 => app.use(express.json(), express.urlencoded()) 路径还有json数据!

  • 动态路由

    通过req.params获取动态路由中的参数 => /id /123等等!
    作用:拿到请求的参数 这是一个对象,可以采用对象的解构 let { id } = req.params 等等!

postman测试接口的使用

  • 假如你的请求方式为get 请求的路径:http://localhost:9292/goods => 只要包含/goods路径就可以拿到这个接口数据!
  • 在postman测试修改的接口: => http://localhost:9292/goods/123

server.js文件

const express = require("express");

//需求:利用express创建一个服务器!
const app = express();

//把静态资源托管在中间件之中
const middleware = express.static("./");
//把这些资源对外开放
app.use(middleware)

// app.use(express.static("./"))

app.use(express.json(), express.urlencoded())
// express.json() 作用:发送一个json的响应,在express之中格式化为json数据
//express.urlencoded() 作用:使用urlencode的有效载荷解析传入的请求,并且基于body-parser,这是针对post请求中的url的格式化与data参数的格式化!

//封装一个接口:   => 带有路径,只有匹配了路径,才能进入到中间组件之内!

//查 => http:localhost:9292/goods.html (在浏览器之中查询点击搜索即可!)
app.get("/goods", (req, res, next) => {
  console.log("get=>goods"); //这是在服务器打印的
  var goodlist = [];
  for (var i = 0; i < 10; i++) {
    const good = {
      id: "guid" + i,
      price: parseInt(Math.random() * 1000),
      num: i * 2
    }
    goodlist.push(good)
  }
  //服务器做出响应!
  res.send(goodlist);
})

//增
app.post("/goods", (req, res) => {
  console.log("post=>goods"); //post=>goods 在环境之中打印这一句  代表请假接受到了 
  //这时候,需要操作数据库,给数据库插入一条数据!
  res.send("添加一条商品数据")
})

// 注意点:就是修改的时候,需要一个动态的id指明那一条数据 
//改
app.put("/goods/:id", (req, res) => {
  console.log("put=>goods");
  let {
    id
  } = req.params; //拿到url之中的请求携带参数
  console.log(id);
  res.send("修改了一条数据");
})

//删
app.delete("/goods/:id", (req, res) => {
  console.log("del=>goods");
  // res.delete(req.params)
  const {
    id
  } = req.params;
  // 查询数据库,删除对应商品
  res.send('添加商品成')
})

//服务器监听的端口号
app.listen(9292, () => {
  console.log("server is running");
})

注意点:在浏览器之中访问:http://localhost:9292/goods.html 等等!

路由

  • 概念:所谓路由就是一个url路径!,根据不同的url路径,访问不同的文件!
  • express中的Router作用就是为了方便我们更好的根据路由去分模块。避免将所有路由都写在入口文件中(index.js)
  • 划分文件使用Router
    • 创建一个routes目录,专门用于放置路由文件,通过module.exports导出供外部使用。
  • 定义一个路由:
    ``

配置路由前的设置

创建一个存储端口号的配置文件
  • 创建一个config.json 文件 => { "PORT": 9292 }
    作用:就是存储着这个端口号 你开启服务器的端口号!
    在服务器文件之中引入这个配置文件 => 这是一个对象哦,对象解构的方式
    const { PORT } = require('./config.json');
需要配置服务器开启的位置
  • 注意点:服务器.js文件的顺序:先去package.json之中查询是否设置了main属性,若是有,那么以这个引入.js文件,若是没有,那么就以index.js文件引入!
  • 在package.json中设置 => mian属性 设置为:server.js 为先引入的文件!
  • main属性主要使用在引用或者开发某个依赖包的时候需要此属性的支持
    "main": "server.js"

配置路由1

  • 第一步:先开启一个服务器
    在server.js 文件的配置
const express = require("express");

//引入端口号
const {
  PORT
} = require("./config.json")

//引入路由目录下的所有路由 => 就是在index.js文件中导出了一个中间件函数!
const Router = require("./router")

//创建一个服务器
const app = express();

//使用中间件 来把静态资源对外的开发
app.use(Router);

//服务器监听端口号
app.listen(PORT, () => {
  console.log(`server is running ${PORT}`);
})
  • 第二步:在index.js文件中设置路由
const express = require("express");

//创建一个路由对象! 作用:就是在index.js文件之中  根据不同的接口划分为不同的接口路由!
const router = express.Router();

//关于goods的接口
//查询
router.get("/goods", (req, res) => {
  console.log("get=>post");
  res.send("我是get请求下的数据")
})

//增
router.post("/goods", (req, res) => {
  console.log("post=>post");
  res.send("我是post请求下的数据")
})

//改
router.put("/goods/:id", (req, res) => {
  console.log("put=>post");
  res.send("我是put请求下的数据")
})

//删
router.delete("/goods/:id", (req, res) => {
  console.log("delete=>post");
  res.send("我是delete请求下的数据")
})

//关于user的接口

//登录 查
router.post("/user", (req, res) => {
  console.log("login=>post");
  res.send("登录成功")
})

//注册 增
router.post("/user", (req, res) => {
  console.log("reg=>post");
  res.send("注册成功")
})

module.exports = router;
//导出这个路由 就是把这个.js文件当做一个函数,也就是一个中间件的方式导出 在server.js文件中使用即可!

配置路由2 => 对路由配置的优化

  • 第一步:配置server.js文件
const express = require("express");
//引入端口号
const {
  PORT
} = require("./config.json")

//引入路由目录下的所有路由 => 就是在index.js文件中导出了一个中间件函数!
const Router = require("./router")

//创建一个服务器
const app = express();

//使用中间件 来把静态资源对外的开发
app.use(Router);

//服务器监听端口号
app.listen(PORT, () => {
  console.log(`server is running ${PORT}`);
})
  • 第二步:对于index.js文件中的 路由在细分为每一个单独的模块 比如user goods
    index.js文件
const express = require("express");

//创建一个路由对象! 作用:就是在index.js文件之中  根据不同的接口划分为不同的接口路由!
const router = express.Router();

//对于中间件的格式化 路径和json数据
router.use(express.json(), express.urlencoded());

//引入 goods和 user的接口!
const user = require("./user")
const goods = require("./goods")

//把这些引入的中间 user接口等 存入中间件之中  路径 - 中间件
router.use("/user", user);
router.use("/goods", goods);

module.exports = router;
//导出这个路由 就是把这个.js文件当做一个函数,也就是一个中间件的方式导出 在server.js文件中使用即可!
  • 第三步:对于每一个url对应的接口 封装在一个单独的路由之上!
    比如:goods.js文件
const express = require("express");

const router = express.Router();

//关于goods的接口
//查询
router.get("/", (req, res) => {
  console.log("get=>post");
  res.send("我是get请求下的数据")
})

//增
router.post("/", (req, res) => {
  console.log("post=>post");
  res.send("我是post请求下的数据")
})

//改
router.put("/:id", (req, res) => {
  console.log("put=>post");
  res.send("我是put请求下的数据")
})

//删
router.delete("/:id", (req, res) => {
  console.log("delete=>post");
  res.send("我是delete请求下的数据")
})

module.exports = router;

node实现跨域

1:CORS实现跨域 => 使用把跨域的.js文件在中间件中定义(函数),然后导出这个中间件!

CORS实现跨域

  • 创建一个服务器
const express = require("express");

//引入端口号
const {
  PORT
} = require("./config.json")

//引入路由目录下的所有路由 => 就是在index.js文件中导出了一个中间件函数!
const Router = require("./router");

//创建一个服务器
const app = express();

//使用中间件 来把静态资源对外的开发
app.use(Router);


//服务器监听端口号
app.listen(PORT, () => {
  console.log(`server is running ${PORT}`);
})
  • index.js文件!
const express = require("express");

//创建一个路由对象! 作用:就是在index.js文件之中  根据不同的接口划分为不同的接口路由!
const router = express.Router();
const cors = require("../filter/cors");
router.use(cors)

//对于中间件的格式化 路径和json数据
router.use(express.json(), express.urlencoded());

//引入 goods和 user的接口!
const user = require("./user")
const goods = require("./goods")

//把这些引入的中间 user接口等 存入中间件之中  路径 - 中间件
router.use("/user", user);
router.use("/goods", goods);

//引入cors中间件 实现跨域


module.exports = router;
//导出这个路由 就是把这个.js文件当做一个函数,也就是一个中间件的方式导出 在server.js文件中使用即可!
  • 原理:
  • cors.js文件 这个最好存储在一个单独的文件之中!
const allow_origin = ["localhost:9292", "www.baidu.com"]; //设置可以跨域的请求源! 但是这些都是需要开启的服务器!

function cors(req, res, next) {
  //如果可跨域的源之中 存在着这个请求的端口号 那么证明可以给与跨域
  // console.log(req.get('host'));
  if (allow_origin.includes(req.get('host'))) {

    res.set({ //设置响应头 
      "Access-Control-Allow-Origin": "*", //或者 "localhost:端口号"
      "Access-Control-Allow-Headers": "Content-Type,Content-Length, Authorization, Accept,X-Requested-With",
      "Access-Control-Allow-Methods": "PUT,POST,GET,PATCH,DELETE,OPTIONS"
    })
    // 跨域请求CORS中的预请求
    if (req.method == "OPTIONS") {
      res.sendStatus(200); /*让options请求快速返回*/
    } else {
      next();
    }
  } else {
    res.send("401")
  }
}

module.exports = cors;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值