express接口请求的几种方式分析总结

导语

在用express做接口开发的时候,我们要处理post,get,put,delete等请求,以及jsonp的方式,这篇文章记录下结合ajax,实现处理这些请求方式的过程

实现过程

上代码,主要演示post,get及jsonp的请求

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
   <button id="getBtn">GET</button>
   <button id="postBtn">POST</button>
   <button id="delBtn">DELETE</button>
   <button id="jsonpBtn">JSONP</button>

  <script>
       $(function(){
           const btnGet = $('#getBtn');
           const btnPost = $('#postBtn');
           const delBtn = $('#delBtn');
           const jsonpBtn = $('#jsonpBtn');
           btnGet.click(function(){
              console.log('哈哈哈')
              $.ajax({
                type:"GET",
                url:"http://127.0.0.1:4444/api/get",
                data:{
                  name:'sa',
                  age:20
                },
                success(res){
                  console.log("🚀 ~ success ~ res:", res)
                }
              })
           })
           btnPost.click(function(){
              console.log('哈哈哈')
              $.ajax({
                type:"POST",
                url:"http://127.0.0.1:4444/api/post",
                data:{
                  name:'lulu',
                  age:18
                },
                success(res){
                  console.log("🚀 ~ success ~ res:", res)
                }
              })
           })
           delBtn.click(function(){
            $.ajax({
              type:'DELETE',
              url:'http://127.0.0.1:4444/api/delete',
              success(res){
                  console.log("🚀 ~ success ~ res:", res)
                }
            })
           })
           //jsonp的请求需要加上datatype字段属性,其他的不用
           jsonpBtn.click(function(){
            $.ajax({
              url:'http://127.0.0.1:4444/api/jsonp?cabllbacb=cb',
              dataType:'jsonp',
              success(res){
                  console.log("🚀 ~ success ~ res:", res)
                }
            })
           })
       })
  </script>
</body>
</html>

在这里插入图片描述

jsonp的请求需要加上datatype字段属性,其他的不用,?callback=cb可以自己自定义,取名不限制,要注意的时候后端接口会获取这个名字,会用上,要保持一致

服务器接口代码

const express = require("express");
const userRouter = require("./router/user");
const bodyParser = require("body-parser");
const path = require("path");
const cors = require("cors");
const app = express();

app.use(express.static("public"));
//ejs模版的必须配置
// app.set("view engine", "ejs");
// app.set("views", path.join(__dirname, "views"));
//解析请求体参数
app.use(bodyParser.json());
app.use(express.urlencoded({ extended: false }));

//jsonp接口,必须在cors配置之前
app.use("/api/jsonp", (req, res) => {
  // TODO
  const fnName = req.query.callback;
  const data = {
    name: "李世明",
    age: 150,
    gender: "男",
  };
  const sData = `${fnName}(${JSON.stringify(data)})`;
  res.send(sData);
});

//跨域资源共享
app.use(cors());
app.use("/api", userRouter);

//错误级别的中间件
app.use((err, req, res, next) => {
  res.send("Error! " + err.message);
});

app.listen(4444, () => {
  console.log("app is running on port 4444");
});

**注意点:jsonp接口要写在配置cors配置之前,否则会当做普通的接口请求处理。**

get请求的结果

在这里插入图片描述

post请求的结果

在这里插入图片描述
delete请求的结果

关于预检请求也就是options接口:

客户端向服务端发起的询问是否支持该接口请求,服务端允许则发起真是的请求,否则会拒绝当前的请求
1.除get,post,head三个简单请求方式外的其他请求方式都会触发预检请求
2.请求头添加了自定义的信息,不是常见的请求头字段,也会触发预检请求

在这里插入图片描述
JSONP请求结果
在这里插入图片描述

严格来说,
jsonp不属于真正的ajax请求,因为它没有使用xmlhttprequest这个对象
JSONP只支持get方式,不支持其他请求方式

在这里插入图片描述
表头里面其他两个参数是浏览器自动生成的,不需要我们处理

const express = require("express");
const router = express.Router();

router.get("/get", (req, res) => {
  const data = req.query;
  res.send({
    status: 0,
    msg: "ok",
    data,
  });
});

router.post("/post", (req, res) => {
  const data = req.body;
  res.send({
    status: 0,
    msg: "ok",
    data,
  });
});

router.delete("/delete", (req, res) => {
  res.send({
    status: 0,
    msg: "ok",
  });
});

module.exports = router;

到这里,我们就熟悉了怎么处理常见的接口请求了

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于uni-app中的跨域问题,可以通过以下几种方式解决: 1. 使用代理:在uni-app的配置文件vue.config.js中配置proxyTable,将请求代理到后端接口。示例代码如下: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://example.com', // 后端接口地址 changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 2. 后端设置CORS:在后端接口中设置CORS(跨域资源共享)头部信息,允许前端的跨域请求。示例代码如下(使用Node.js Express框架): ```javascript const express = require('express'); const app = express(); // 设置CORS头部信息 app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); next(); }); // 处理接口请求 app.get('/api/example', (req, res) => { // 处理业务逻辑 res.json({ message: 'Hello World' }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 3. JSONP请求:如果后端接口支持JSONP,可以使用uni-app中的jsonp插件进行跨域请求。示例代码如下: ```javascript import jsonp from 'jsonp'; // 起JSONP请求 jsonp('http://example.com/api', { param: 'callback' }, (err, data) => { if (err) { console.error(err); } else { console.log(data); } }); ``` 以上是解决uni-app中跨域问题的常见方法,选择合适的方式进行解决即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值