目录
node编写接口
-
接口编写(RESTful Api规范)
- 根据不同的请求类型实现不同的接口
- get 查
- post 增
- put 改(覆盖)
- patch 改(修改部分)
- delete 删
- 根据不同的地址实现不同的接口
- 根据不同的请求类型实现不同的接口
-
获取请求参数
- url地址:get
通过req.query获取
// get /goods?page=1&size=10
- 请求体
通过req.body获取,前提使用相应中间件格式化参数
- 动态路由
通过req.params获取
- url地址:get
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;